警告:它说要将%d更改为%I64d
char string[DIM]="hello";
printf("%d",strlen(string));
As@AndreasWenzel回答的"%zu"
是最正确的。但你写道:
当我放入%zd警告时,它会输出此警告:未知转换在格式中键入字符"z">
如果您的实现不支持"%z..."
格式,则需要将strlen
的结果转换为尽可能大的无符号整数。
printf( "%llu", (unsigned long long)strlen(string) );
但是如果您的实现不支持"%llu";
printf( "%lu", (unsigned long)strlen(string) );
最后的手段:
printf( "%u", (unsigned)strlen(string) );
%d
printf
格式说明符需要一个int
。然而,strlen
的返回值的类型是size_t
。
size_t
的正确printf
格式说明符是%zu
。
这条线应该工作:
printf( "%zu", strlen(string) );
strlen
不返回int
。但是您的printf格式及其参数必须匹配。所以说
printf("%d", (int)strlen(string));
只要你的字符串永远不超过32767个字符,你就可以了。
首选的解决方案是
printf("%zu", strlen(string));
但听起来您的老式编译器不支持%zu
。(我很同情你:我有一个编译器工作了很长时间,也遇到了同样的问题。(
如果您担心长度超过32767个字符的字符串,请参阅其他答案或这个问题:如何使用printf系列便携式打印size_t变量?