關於一些 C 疑問 |
答題得分者是:johnpage
|
Dianasour
一般會員 發表:9 回覆:8 積分:3 註冊:2007-12-25 發送簡訊給我 |
我在學習 C 當中遇到一些疑問希望各位大大能够帮忙解答
1. char str[5] = "Hello" 和 char *str = "Hello" 两者有何差别和優缺点在哪? 記憶體是否應該是一個字元 1 byte 共 5 bytes? 那麽是否包含了 \0 做為結束 2. [code cpp] #include #include #include int main() { char *str = malloc(sizeof(char) * 5); char str2[5]; int length; str[0] = 'H'; str[1] = 'e'; str[2] = 'l'; str[3] = 'l'; str[4] = 'o'; printf("str : String = %s, Address = %p, Length = %d, Size = Ûytes\n", str, str, strlen(str), sizeof(str)); length = strlen(str); strncpy(str2, str, length); printf("str2 : String = %s, Address = %p, Length = %d, Size = Ûytes\n", str2, str2, strlen(str2), sizeof(str2)); str2[length] = '\0'; printf("str2 : String = %s, Address = %p, Length = %d, Size = Ûytes\n", str2, str2, strlen(str2), sizeof(str2)); free(str); return 0; } [/code] 輸出結果 : str : String = Hello, Address = 0x97be008, Length = 5, Length = 6, Size = 5bytes str2 : String = Hello, Address = 0xbfe23353, Length = 5, Size = 5bytes 在這個測試中,怎么 str 會是只有 4bytes 呢? 而没 \0 的 str2 怎么字串長度為 6?? 而我所設定的 char str[5] 應該只有 5 個字元,那麽 str2[length] (str 的 length = 5) 為何可以成立,理因是 [0]...[4] 5個字元吧?? 3. [code cpp] #include int main() { int i, j; char c; while(1) { printf("1. 測試\n2. 結束\n>"); scanf("%d", &i); if(i == 1) { j = 0; while(j < 1 || j > 10) { printf("請輸入 1 至 10 的數字 : "); scanf("%d", &j); } printf("此數字的平方為 %d\n\n", j * j); //c = getchar(); //scanf("%c", &c); } else if(i == 2) break; } return 0; } [/code] 這段程式中為何 getchar 和 scanf 不起作用呢?? (在學校的電腦所以不是使用 windows,通過 gcc compile 不知是不是這個原因) 編輯記錄
Dianasour 重新編輯於 2010-08-29 12:46:17, 註解 增加問題 :$‧
|
johnpage
初階會員 發表:0 回覆:79 積分:40 註冊:2004-08-07 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |