#include"stdio.h"
#include"string.h"
void main()
{
char c[]={'a','b','c'};
printf("%d\n",strlen(c));
}
怎么输出是7啊,加将c[]换成c[7]或者加上'\0'又对了,strlen函数是遇到'\0'终止,但是c[7]={'a','b','c'};同样没有'/0',但是求长是正确的,我记得系统会默认加上'\0'的,例如c[7]={'a','b','c'};系统实际上存的是'a','b','c','\0','\0','\0','\0'。
高手帮忙看下为什么strlen求错了,这种问题该怎么避免?
最佳答案:
问题出在:char p[]={'a','b','c'},p[]你没指定长度,系统就不知道,默认也为无限长(可以验证:你输入p[16]都还可以看到有输出,因为你没指定p[16],所以这个输出是系统随机给的),这时你调用strlen函数来求“长度未知”的字符串,strlen“很聪明”,它就会给你输出一个奇怪的7(但不一定只是7,你换个其他长度的字符串它又可能输出其他数了)
而且:char p[]这种形式下系统是不会在结尾默认加上'\0'的!。只有在指定长度char p[5]={'a','b','c'}或者字符串形式char p[]="abc"的情况下系统才会在末尾默认加上'\0',这时就不会出错。
烙印99
largeQ
慕的地8271018