我試圖創建一個程序,它接收一組字符串(用戶被要求輸入它們將輸入的字符串的數量),一旦它有這些字符串,它們被放置在一個數組中,使用動態內存。用C中最後一個覆蓋的數組元素
的輸出中會是這樣的:
# of Strings: 3
Cat
Dog
Elephant
Cat
Dog
Elephant
繼承人我的代碼片段,之後我有一個字符串的數量。
sptr=malloc(sizeof(char*)*nStrings);
for(i=0;i<nStrings;i++)
{
scanf("%s",string);
length=strlen(string);
sptr[i]=malloc(sizeof(char)*length);
sptr[i]=string;
}
其中sptr是數組,我將訪問以輸出字符串。 所以它是一個指向數組的指針數組,指向單個字符串(或其他字符數組,如果您希望這樣想)。
可以說有兩個字符串。 我分配內存的兩個指針, 然後在第一個指針,我掃描一個字符串, 我發現字符串的長度, 我分配內存的字符串的大小 和我等於指向字符串的指針。 這一切都很花哨,如果我在最後一行之後放一個printf(),它就會起作用。 我面對的問題是,如果讓我們說有3個字符串,每次通過sptr [i]分配正確,但在該塊之外,所有sptr的指示都是=我放入的最後一個字符串,並且我不知道爲什麼。
如果你能幫助我,我會很感激。謝謝。
正如答案所暗示的,'sptr [i] = string;'分配指針,而不是它指向的內存。如果您重複使用相同的內存來讀取字符串,那麼數組中的每個元素都將指向內存中的相同位置,因此它們將打印相同的字符串。更喜歡strcpy的srtncpy,不太容易將一個字符串複製到一個較小的緩衝區並獲得一個內存溢出。希望這可以幫助。 – 2010-01-24 18:11:02
謝謝,這完美澄清了事情。如果僅僅因爲它是我們在課堂上使用的,我會使用strcpy。我正在考慮完全回答的問題。男人,我喜歡這個社區。 – Blackbinary 2010-01-24 18:40:57