2015-08-19 25 views
1

這裏的問題是,每當我更改studName的內容時,studArr中的內容也會發生變化。C - 在一個2d char *數組中存儲多個char數組

如果輸入看起來像這樣(AAA,BBB,CCC)我首先將AAA存儲在studName之內,然後將studName存儲到studArr

我試圖讓:

studArr[0][1] = "AAA" 

studArr[0][2] = "BBB" 

studArr[0][3] = "CCC 

但是當我使用此代碼個個平等CCC。有沒有辦法解決這個問題?

for (j = 0; j < NumCourses + 1; j++){ 
    i = 0; 
    k = 0; 
    while ((c = fgetc(ifp)) != ')'){ 
     if (c == ','){ 
      studName[3] = '\0'; // ends sting with null char 
      studArr[j][k+1] = studName; 
      k++; 
      i = 0; 
     } 
     else{ 
      studName[i] = c; 
      i++; 
     } 
    } 
    studName[3] = '\0'; // ends sting with null char 
    studArr[j][k+1] = studName; // store studName in studArr 

} 
+0

歡迎來到Stack Overflow!請參閱[遊覽](http://stackoverflow.com/tour)並閱讀[如何提問](http://stackoverflow.com/help/how-to-ask),以瞭解我們對此問題的期望。 –

+0

什麼是'studArr'? –

+0

char * studArr [NumCourses] [1024]; char studName [3]; 其中NumCourses只是一個常數 – IVRafa

回答

4

與分配:

studArr [j]的[K + 1] = studName;

你存儲一個指向char [] studName的指針。 你應該爲每個實例分配內存,喜歡這裏:

studArr[j][k+1] = strdup(studName); 

注:記得釋放分配的內存。

+0

謝謝,這正是我需要的! – IVRafa

1

我想這是因爲您將所有指針指向studName,這將始終包含最後一次讀取的字符串。

您需要重複字符串,而不是隻分配指針。可以使用strdup(這意味着您必須稍後釋放內存),或者將每個條目都作爲數組並複製到其中。

2

studName是一個指針,並且每個studArr[j][N]被設置爲相同的指針。由指針找到的內容正在更新,但同一指針的所有重複副本將只顯示最後一個內容。

您可能需要使用strncpy()等。具體細節實際上取決於你尚未顯示的代碼,如聲明。