如何通过指针使用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
相关产品推荐
相关产品推荐

