【发布时间】:2017-10-12 21:42:14
【问题描述】:
strlen 返回的类型是size_t,也就是long unsigned int。
为什么编译以下代码不会发出关于slen签名的警告?
char msg[] = "Hello";
int slen= strlen(msg);
(我预计long unsigned int slen 是避免此类警告所必需的。)
【问题讨论】:
-
可能取决于您的编译器设置。
-
因为没必要。这种转换是完全合法的。
-
-Wconversion为 GCC -
size_t在您正在使用的实现中恰好是unsigned long int。它不一定是。它必须是某种无符号整数类型,足以容纳对象的大小。