推 ledia:你在 strlen(b) 時, b 的值還不知道是啥 02/09 16:00
→ ledia:還有 b != "exit" 請改用 strcmp 02/09 16:01
→ play2004:LEDIA先生 用你說的第二行的方法會產生記憶體區段錯誤說 02/09 18:03
推 RiverJackson:if (strcmp(b, "exit")!=0) ?! 02/09 20:42
推 ledia:如果你也是在 fgets 前 strcmp, 有錯並不意外 ^^| 02/09 20:43
→ play2004:喔喔 謝謝 能解釋一下記憶體區段錯誤嗎? 02/09 23:23
推 ledia:strcmp 並不檢查 b 陣列大小, 在 b 尚未以 fgets 給值之前 02/10 00:38
→ ledia:裡面的值是什麼是不可預期的 02/10 00:38
→ ledia:因此 strcmp 就以一般零值當作結尾的條件來看待 b 02/10 00:38
→ ledia:當 b 的範圍中沒有零值讓 strcmp 的檢查在合法範圍之內就停 02/10 00:39
→ ledia:下來的話, 就有可能發生記憶體區段錯誤 02/10 00:40
→ ledia:舉一個 strcmp 的實作例子 02/10 00:40
→ ledia:while (*s1 == *s2++) 02/10 00:40
→ ledia: if (*s1++ == 0) 02/10 00:40
→ ledia: return (0); 02/10 00:41
推 RiverJackson:所以就char b[200]=""; 應該就可以了吧 我猜 02/10 09:58
→ play2004:謝謝大大解說^ ^ 02/10 15:06