使用strlen()时GCC编译器报“makes pointer from integer without cast”错误求助
解决strlen()调用时的GCC类型转换错误问题
虽然没看到你的具体代码,但根据你描述的场景,大概率是以下两种常见问题导致的,我给你拆解下对应的解决办法:
情况1:传给strlen()的指针类型不匹配
strlen()的参数要求是const char*类型,如果你的指针是void*或者其他非字符指针类型,直接传入会触发GCC的类型转换错误。比如你可能写了类似这样的代码:
#include <stdio.h> #include <string.h> int main() { void* input_ptr; char input_buf[100]; fgets(input_buf, 100, stdin); input_ptr = input_buf; // 直接传void*给strlen会触发类型错误 printf("字符串长度:%d\n", strlen(input_ptr)); return 0; }
解决办法:把指针强制转换成const char*再传给strlen(),注意不是转成int:
printf("字符串长度:%zu\n", strlen((const char*)input_ptr));
情况2:输出strlen()返回值时格式符错误
strlen()的返回值是size_t类型(无符号整数类型),如果你用%d(对应int类型)来输出,GCC会报类型不匹配的警告/错误。哪怕你强制把返回值转成int,也可能在字符串长度超出int范围时出现溢出问题。
正确做法:用%zu格式符来输出size_t类型的返回值,示例代码:
#include <stdio.h> #include <string.h> int main() { char input_buf[100]; fgets(input_buf, 100, stdin); char* str_ptr = input_buf; // 用%zu匹配size_t类型的返回值 printf("字符串长度:%zu\n", strlen(str_ptr)); return 0; }
如果这两种情况都不是你的问题,麻烦把你的代码贴出来,我再帮你精准定位问题~
内容的提问来源于stack exchange,提问作者Starch Wars
相关产品推荐
相关产品推荐

