我想知道单词的长度[] 但这告诉我我该如何解决?
int main(int argc, const char * argv[]) {
char test[] = "ls test";
f_sparce_arg(test);
return 0;
}
char * f_sparce_arg(char words[]){
int words_length;
words_length = strlen(words); /* warning: Implicit conversion
integer precision: 'unsigned
long' to 'int' */
printf("%d", words_length);
return "";
}
// warning: Implicit conversion integer precision: 'unsigned long' to 'int'
答案 0 :(得分:3)
strlen
function返回的是Rails.application.config.assets.precompile += %w( application.js )
,
因此您应该使用它来存储其返回值。
size_t
不幸的是,某些编译器或库不支持char * f_sparce_arg(char words[]){
size_t words_length; /* use proper type */
words_length = strlen(words);
printf("%zu",words_length); /* the format to print size_t value is %zu */
return "";
}
格式。
另一种方法是,如果字符串不会那么长,则将返回值强制转换为%zu
。
int
答案 1 :(得分:2)
这不是错误,并且在您添加了函数声明和预处理器指令的情况下,代码可以正常工作。这是警告您的编译器会告诉您,由于unsigned
到signed
的转换是特定于编译器而非语言的,因此转换时可能会有一些数据更改。
C的数据类型为size_t
,它能够存储C中最大的数据大小,并且在像<stddef.h>, <stdio.h>, <stdlib.h>, <string.h>, <time.h>, <wchar.h>
这样的几个预处理器中定义,并且是32位unsigned int
的别名编译器,并且是64位编译器中unsigned long long
的别名。优良作法是添加unsigned
和size_t
之类的其他信息,以实现构建项目时所需的跨平台性能。
答案 2 :(得分:1)
我认为您可以通过将int
换成unsigned int
来解决此问题。 (不是完美的解决方案)
int
变量可能是负值,因此给该变量分配任何值都是不安全的。如果将无符号值分配给int,则可能会导致溢出,这非常危险。