You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 10:17:57