无法获取 arr[] 的长度:隐式转换会丢失整数精度:'unsigned long' 到 'int' for strlen(arr)
Cannot get the length of arr[] : Implicit conversion loses integer precision: 'unsigned long' to 'int' for strlen(arr)
隐式转换失去整数精度:
'unsigned long' 到 'int'
我想获取单词的长度[]
但它告诉我这个。我该如何解决?
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'
什么 strlen
function returns 是 size_t
,
所以你应该用它来存储它的 return 值。
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
格式。
另一种方法是,如果字符串不会太长,将 return 值转换为 int
.
char * f_sparce_arg(char words[]){
int words_length;
words_length = (int)strlen(words); /* explicitly cast the result to avoid warnings */
printf("%d",words_length);
return "";
}
这不是错误,如果您添加了函数声明和预处理器指令,代码将绝对正常运行。这是一个警告,你的编译器给你可能有一些数据在转换中改变,因为 unsigned
到 signed
的转换特定于编译器而不是语言。
C 有一个数据类型 size_t
,它能够在 C 中存储最大可能的数据大小,并且在 <stddef.h>, <stdio.h>, <stdlib.h>, <string.h>, <time.h>, <wchar.h>
等几个预处理器中定义,并且是 unsigned int
的别名32 位编译器,是 64 位编译器中 unsigned long long
的别名。为跨平台性能添加 unsigned
和 size_t
等附加信息是一个很好的做法,这在构建项目时是必需的。
我想你可以通过将 int
换成 unsigned int
来修复它。 (不是完美的解决方案)
int
变量可能是负值,所以给这个变量赋值是不安全的。如果给int赋无符号值,可能会造成溢出,非常危险。
隐式转换失去整数精度:
'unsigned long' 到 'int'
我想获取单词的长度[] 但它告诉我这个。我该如何解决?
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'
什么 strlen
function returns 是 size_t
,
所以你应该用它来存储它的 return 值。
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
格式。
另一种方法是,如果字符串不会太长,将 return 值转换为 int
.
char * f_sparce_arg(char words[]){
int words_length;
words_length = (int)strlen(words); /* explicitly cast the result to avoid warnings */
printf("%d",words_length);
return "";
}
这不是错误,如果您添加了函数声明和预处理器指令,代码将绝对正常运行。这是一个警告,你的编译器给你可能有一些数据在转换中改变,因为 unsigned
到 signed
的转换特定于编译器而不是语言。
C 有一个数据类型 size_t
,它能够在 C 中存储最大可能的数据大小,并且在 <stddef.h>, <stdio.h>, <stdlib.h>, <string.h>, <time.h>, <wchar.h>
等几个预处理器中定义,并且是 unsigned int
的别名32 位编译器,是 64 位编译器中 unsigned long long
的别名。为跨平台性能添加 unsigned
和 size_t
等附加信息是一个很好的做法,这在构建项目时是必需的。
我想你可以通过将 int
换成 unsigned int
来修复它。 (不是完美的解决方案)
int
变量可能是负值,所以给这个变量赋值是不安全的。如果给int赋无符号值,可能会造成溢出,非常危险。