Re: [問題] 為什麼 while (*s++ = *t++) 是字串複製?

看板C_and_CPP作者 (反及閘萬用閘)時間13年前 (2010/10/07 21:49), 編輯推噓2(2011)
留言13則, 5人參與, 最新討論串2/2 (看更多)
※ 引述《nand (反及閘萬用閘)》之銘言: : 其中一段落讀到 while (*s++ = *t++) 的意思是字串複製 : 1. ( a = b ) 這樣的指派指令 是會傳回 true 嗎? : 2. 哪什麼時候 (*s++ = *t++) 會傳回 fasle 呢? 為什麼呢? : 感謝大家看完 小弟寫程式做實驗 有以下心得: 1. ( a = b ) 這種表示式, 傳回的值是 b 2. 原來 char s1[100] 的 s1 阿, 是 char pointer (即 char*) 3. 推文大大說的是對的, 字串尾是放 00h 謝謝各位指導 附實驗: #include <stdio> int main(int argc, char *argv[]){ char s1[100] = "hello, world"; char s2[100]; printf("s1 = %s\ns2 = %s\n\n", s1, s2); char* a = s1; char* b = s2; while(true){ int iValue = (*b = *a); printf("%c ", iValue); a++; b++; bool bValue = iValue; if(!bValue) break; } printf("\n\ns1 = %s\ns2 = %s\n", s1, s2); } -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 125.225.160.102

10/07 21:51, , 1F
1和3都OK 2請小心 陣列和指標只是很像並不完全一樣
10/07 21:51, 1F

10/07 21:52, , 2F
你指定給 a 和 b 之後同一個值才變成了指標
10/07 21:52, 2F

10/07 21:52, , 3F
當它還是 s1 s2 時它並不是指標而是陣列變數
10/07 21:52, 3F

10/07 22:04, , 4F
其實a=b不是傳回b 應該是他會傳回a這個l-value 如果有要
10/07 22:04, 4F

10/07 22:04, , 5F
再做事情 他會再從這個l-value裡面去拿值
10/07 22:04, 5F

10/07 22:05, , 6F
2.同一樓所說 是char[] 不是char*
10/07 22:05, 6F

10/07 22:41, , 7F
謝謝L大、n大 剛特別去爬文才知道
10/07 22:41, 7F

10/07 22:42, , 8F
2. 是 compiler 暗中把 s1 decay 成 &s1[0]
10/07 22:42, 8F

10/07 22:46, , 9F
nowar大能否多講一點 (a++ = b++) 發生的事?
10/07 22:46, 9F

10/07 22:51, , 10F
(a++ = b++) 實際上發生了以下動作:
10/07 22:51, 10F

10/07 22:52, , 11F
temp1 = a, a += 1, temp2 = b, b += 1,temp1 = temp2
10/07 22:52, 11F

10/08 00:56, , 12F
感謝
10/08 00:56, 12F

10/08 07:10, , 13F
可以參考十三誡之十二
10/08 07:10, 13F
文章代碼(AID): #1ChT00u6 (C_and_CPP)
文章代碼(AID): #1ChT00u6 (C_and_CPP)