2 回答
TA贡献1877条经验 获得超6个赞
字面字符串里头 \开始的是一个转义字符。
这里\0代表的是一个空字符。
sizeof()当括号里头是数组名的时候 它计算的是整个数组的长度。所以是7。
strlen()是计算字符串的长度。c里头字符串是以空字符结尾作为字符串结束的标志
所以strlen()在遇到空字符的时候就已经认为字符串结束了。所以这里它只认为字符串的长度为2.是a和0。空字符不计算在内。
int main()
{
char a[7]="a0\0a0\0";
int i,j;
i=sizeof(a);
j=strlen(a);
printf("%d %d\n",i,j);
printf("%s",a);
system("pause");
return 0;
}
printf()输出字符数组
整个输出是
7 2
a0
可以看到空字符是字符串结尾的标志是很重要 因为很多函数是基于此来运用的。
TA贡献1777条经验 获得超10个赞
char arr[]="ABCDE"; //声明一个字符数组
char *ptr; //声明一个字符指针;
for(ptr=arr;ptr<arr+5;ptr++)
printf("%s\n",ptr);
第一次循环,ptr指向数组首地址;从A开始打印;
第二次,ptr++指向数组首地址+1;从B开始打印;
...
依次推就能得出答案;
你一定会继续问:那为什么不输出ABCDE?
原因在于,printf函数输出数组型字符串时,从数组名标记的地址开始读取内容,直到内存中出现标记为‘\0’的内存单元才停止.
char arr[]="A\0B\0C\0D\0E\0";
char *ptr;
ptr = arr;
for(ptr=arr;ptr<arr+10;ptr++)
printf("%s",ptr);
将会得出ABCDE的打印
- 2 回答
- 0 关注
- 161 浏览
添加回答
举报