亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

有以下程序段 ,誰來幫我詳細講解一下?。?/h1>

有以下程序段 ,誰來幫我詳細講解一下啊?

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 關注
  • 220 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號