为了账号安全,请及时绑定邮箱和手机立即绑定

有以下程序段 ,谁来帮我详细讲解一下啊?

有以下程序段 ,谁来帮我详细讲解一下啊?

C
暮色呼如 2023-04-01 14:10:17
char arr[]="ABCDE"; char *ptr; for(ptr=arr;ptr<arr+5;ptr++) printf("%s\n",ptr); 输出结果是(D) D). ABCDE BCDE CDE DE E
查看完整描述

2 回答

?
慕哥9229398

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

可以看到空字符是字符串结尾的标志是很重要 因为很多函数是基于此来运用的。


查看完整回答
反对 回复 2023-04-03
?
不负相思意

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的打印

查看完整回答
反对 回复 2023-04-03
  • 2 回答
  • 0 关注
  • 161 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信