printf, wprintf,% s,% S,% ls, char * и wchar *: ошибки, не объявленные предупреждением компилятора?

Я пробовал следующий код:

wprintf(L"1 %s\n","some string"); //Good
wprintf(L"2 %s\n",L"some string"); //Not good -> print only first character of the string
printf("3 %s\n","some string"); //Good
//printf("4 %s\n",L"some string"); //Doesn't compile
printf("\n");
wprintf(L"1 %S\n","some string"); //Not good -> print some funny stuff
wprintf(L"2 %S\n",L"some string"); //Good
//printf("3 %S\n","some string"); //Doesn't compile
printf("4 %S\n",L"some string");  //Good

И я получаю следующий вывод:

1 some string
2 s
3 some string

1 g1 %s

2 some string
4 some string

Итак: кажется, что обаwprintf а такжеprintf способны правильно печатать как char *, так и wchar *, но только если используется точный спецификатор.Если используется неправильный спецификатор, вы можете не получить ошибку компиляции (или предупреждение!) И получить неправильное поведение. Вы испытываете такое же поведение?

Примечание: это было протестировано под Windows, скомпилировано с MinGW иг ++ 4.7.2 (я проверю gcc позже)

Изменить: Я также пытался% ls (результат в комментариях)

printf("\n");
wprintf(L"1 %ls\n","some string"); //Not good -> print funny stuff
wprintf(L"2 %ls\n",L"some string"); //Good
// printf("3 %ls\n","some string"); //Doesn't compile
printf("4 %ls\n",L"some string");  //Good

Ответы на вопрос(5)

Ваш ответ на вопрос