无法获取arr []的长度:隐式转换失去整数精度:对于strlen(arr),将'unsigned long'转换为'int'

张千儿

隐式转换失去整数精度:
'unsigned long'到'int'

我想知道words []的长度,但这可以告诉我。我该如何解决?

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功能的回报是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

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 "";
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

Related 相关文章

热门标签

归档