全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:966
推到 Plurk!
推到 Facebook!

關於一些 C 疑問

答題得分者是:johnpage
Dianasour
一般會員


發表:9
回覆:8
積分:3
註冊:2007-12-25

發送簡訊給我
#1 引用回覆 回覆 發表時間:2010-08-29 12:32:40 IP:115.134.xxx.xxx 訂閱
我在學習 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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2010-08-30 00:53:31 IP:111.83.xxx.xxx 訂閱
1.char str[5] = "Hello" => 需知道(字串)陣列大小
char *str = "Hello" =>不需要知道字串大小,但須補一個'\0'字元
2.第一項 =>sizeof(str)傳回的是指標變數的大小

第二項 Length = 6 =>strlen(str2) 會從第一個字元一直數到'\0'字元,如果一直沒遇到則會當機,所以填寫字串時,要習慣補'\0'
系統時間:2024-03-29 18:03:09
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!