读书人

C语言的字符串长度有关问题

发布时间: 2013-09-14 13:03:22 作者: rapoo

C语言的字符串长度问题
#include<stdio.h>
#include<string.h>
void main()
{
char p[]={'a','b','c'},q[10]="abc";
printf("%d %d\n",strlen(p),sizeof(q));
}
运行结果是7和10,为什么不是3和10呢???求大神指点! c c语言
[解决办法]


p的长度未知的!没有结束符!
strlen函数求字符串长度是以'\0'结束符为标识


[解决办法]
因为字符串数组没有写\0结束符, 而strlen又需要\0结束符来计算长度, 
所以它会以p数组内存为起点, 一直往后在连续的内存中找, 它是不管越界问题的,
直到找到一个\0,才认为这个串结束了, 然后返回长度.
所以你这样, 具体会输出几, 完全是看当时你的内存中的数据是怎么样的.

[解决办法]
strlen是挨个计算字符个数直到遇到结束符'\0',但结果不包含结束符,而你的字符数组p没有结束符,所以结果可能是未知的,sizeof(数组名)计算的是数组的空间大小
[解决办法]
引用:
#include<stdio.h>
#include<string.h>
void main()
{
char p[]={'a','b','c'},q[10]="abc";
printf("%d %d\n",strlen(p),sizeof(q));
}
运行结果是7和10,为什么不是3和10呢???求大神指点!

p没有找到'\0',确切的说没有在'c'后面找到'\0',既然在这个位置找不到,它会继续向后找的,知道找到'\0',然后strlen()才退出然后返回长度。
[解决办法]
如果你知道strlen的原理,这个问题就很好解决了,strlen(p),以p开始查找字符'\0',如果当前不是空字符,长度+1,char p[]={'a','b','c'},你定义的是一个字符数组,如果要定义字符串,需要这样
char p[]={'a','b','c','\0'}

读书人网 >C语言

热点推荐