創建字符串所以我試圖編寫一個程序,基本上通過內存分配,每個字符讀取字符,但只通過鍵盤輸入一個字符串創建一個字符串。我知道有很多(更好)的方法可以做到,但我想通過這種特殊的方式來做到這一點! 下面的代碼:通過malloc和getchar()
int newstring (char** string)
{
printf("--------------In function newstring--------------\n");
int i = 0;
string = malloc (sizeof (char));
printf("Adress: %p\n", (void*)string);
if (string == NULL)
return -1;
while (1)
{
printf("Pre-scan\n");
*(string[i]) = getchar();
printf("After-scan\nstring[%d] = %c\n", i, *(string[i]));
i++;
if (*(string[i-1]) == '\n')
break;
printf("Reallocation to size %d\n", i+1);
string = realloc (string, sizeof (char) * (i+1));
if (string == NULL)
return -1;
}
string[i-1] = '\0';
printf("--------------Exit function newstring--------------\n");
return;
}
int main()
{
char *string;
newstring (&string);
printf("%s\n", string);
}
的問題是,程序總是讀第三個字符之前中途死機,這裏所發生的printfs輸出:
Adress: 00AE1578
Pre-scan
1st Input: >>Hello
After-scan
string[0] = H
Reallocation to size 2
Pre-scan
After-scan
string[1] = e
Reallocation to size 3
Pre-scan
我想知道,如果是因爲緩衝區有一些限制,但我覺得很難相信這個限制是2個字符(我嘗試了多個輸入,總是在第三個字符之前卡住)。還試着用「scanf(」%c「,*(string [i]))」來得到相同的結果。
你永遠不會調用'free' - 你的程序會泄漏內存並最終停止,因爲它會耗盡內存。 – Dai
@Dai我不需要免費調用,因爲realloc已經釋放了以前分配的內存。如果你說我應該主要免費打電話,那麼你是對的,但這個計劃從來沒有達到主要的,所以這不是問題! –
@ryyker我意識到這一點,我這樣做是爲了清晰(如果有人看到我的代碼,他們會知道我爲「char」數組分配內存) –