-6ren">
gpt4 book ai didi

c - printf、wprintf、%s、%S、%ls、char* 和 wchar* : Errors not announced by a compiler warning?

转载 作者:太空狗 更新时间:2023-10-29 16:26:28 24 4
gpt4 key购买 nike

我试过下面的代码:

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

因此:似乎 wprintfprintf 都能够正确打印 char* 和 wchar*,但前提是使用了确切的说明符。 如果使用了错误的说明符,您可能不会收到编译错误(也不会收到警告!)并以错误的行为结束。您是否遇到过相同的行为?

注意:这是在 Windows 下测试的,使用 MinGW 和 g++ 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

最佳答案

我怀疑 GCC (mingw) 有自定义代码来禁用对 Windows 上广泛的 printf 函数的检查。这是因为 Microsoft 自己的实现 (MSVCRT) 严重错误并且有 %s%ls backwards广泛的 printf 函数;由于 GCC 无法确定您将链接到 MS 的损坏实现还是一些更正的实现,它可以做的最不引人注目的事情就是关闭警告。

关于c - printf、wprintf、%s、%S、%ls、char* 和 wchar* : Errors not announced by a compiler warning?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17700797/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com