簡體   English   中英

用C中的Last覆蓋的數組元素

[英]Array Elements Overwritten with Last in 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=malloc(sizeof(char*)*nStrings);

for(i=0;i<nStrings;i++)
{
    scanf("%s",string);
    sptr[i]=strdup(string);
}

我假設變量字符串具有足夠的內存來保留讀取的字符串。

發生錯誤是因為您將指針設置為指向字符串變量。

您需要為空終止符額外分配1個字符:

sptr[i]=malloc(sizeof(char)*(length+1));

另外,您需要將字符串復制到新分配的內存中:

strcpy(sptr[i], string);

您的代碼中有兩個問題:您沒有分配足夠的內存。 由於字符串的結尾\\ 0,因此應為長度+ 1。 其次,您應該使用strcpy將字符串復制到分配的內存中。 查找同時處理兩者的strdup函數。

strlen不能說明零終止,您需要添加一個。 但是主要是您需要將字符串復制到分配的內存中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM