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

如何通过指针使用strlen()获取字符串长度?编译报错求助

问题分析与修正

原代码的核心错误

第一段代码的问题

  • 指针类型不匹配:a是char类型数组,&a的类型是char (*)[4](指向包含4个char元素的数组的指针),但你声明的p是int *类型,不同类型的指针不能直接赋值,这是编译报错的第一个原因。
  • strlen参数类型错误:strlen()要求传入char *类型的参数,而你写的*p是对int *指针解引用,得到的是int类型值,完全不符合strlen的参数要求,这是第二个错误。

第二段代码的问题

你把p改成int *p[],这是一个未指定大小的int指针数组,C语言中声明数组必须明确大小(除非初始化时直接赋值),编译器无法确定要给它分配多少内存,所以报错"storage size of 'p' isn't known"。而且就算指定了大小,这个数组的类型和&a的类型依然不匹配,本质问题没解决。

正确的实现方式

如果你想用指针配合strlen()获取字符串长度,只需要用char *类型的指针指向字符串即可:

#include <stdio.h>
#include <string.h>

int main()
{
    char a[] = "wel";
    char *p = a; // 数组名a本身就是指向第一个元素的指针,直接赋值给char*即可
    printf("%zu\n", strlen(p)); // 注意strlen返回值是size_t类型,用%zu格式化更规范
    return 0;
}

如果你想手动用指针实现类似strlen的功能(不调用库函数),可以这样写:

#include <stdio.h>

size_t my_strlen(const char *p)
{
    size_t len = 0;
    while (*p != '\0') { // 遍历到字符串结束符'\0'停止
        len++;
        p++;
    }
    return len;
}

int main()
{
    char a[] = "wel";
    char *p = a;
    printf("%zu\n", my_strlen(p));
    return 0;
}

关键知识点

  • 字符串在C中是以'\0'作为结束标志的,strlen()会从传入的指针位置开始计数,直到遇到'\0'为止。
  • 数组名a等价于&a[0],是指向数组第一个元素的char *指针,不需要用&a(&a是指向整个数组的指针,类型不同)。
  • strlen()的返回值是size_t(无符号整数类型),输出时应该用%zu格式符,而不是%d(%d用于int类型)。

内容的提问来源于stack exchange,提问作者Pankit Shah

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 03:50:47