[英]Creating String through malloc and 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個字符(我嘗試了多次輸入,總是卡在第3個字符之前)。 還嘗試使用“ scanf(”%c“,*(string [i]))”獲得相同的結果。
問題始於此:
string = malloc ( sizeof (char) );
string
是指向實際指針的指針。 您需要取消引用它:
*string = malloc ( sizeof (char) );
然后問題繼續
*(string[i]) = getchar();
您取消引用錯誤的內容,應該是
(*string)[i] = getchar();
與其他使用錯誤的解引用的地方相同。
接着
string[i-1] = '\0';
在這里,您根本不會取消引用指針。 應該
(*string)[i-1] = '\0';
最后, getchar
函數返回一個int
。 當您通過將結果與EOF
進行比較來檢查函數是否失敗時,這一點很重要。 您根本不這樣做。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.