首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

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

2013-09-14 
C语言的字符串长度问题#includestdio.h#includestring.hvoid main(){char p[]{a,b,c},q[10]a

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'}

热点排行