使用printf(..)输出strlen(字符串)的返回时发出警告



警告:它说要将%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) );

%dprintf格式说明符需要一个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变量?

最新更新