C - 在2d char *数组中多次存储char数组

时间:2015-08-19 14:13:42

标签: c arrays

这里的问题是每当我更改studName的内容时,studArr中的内容也会发生变化。

如果输入看起来像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 } 。有没有办法解决这个问题?

function waitForDisplayed(element) {
   var d = protractor.promise.defer(); // the result of this being fulfilled is returned
   browser.wait(element.isDisplayed).
      then(function(isDisplayed) {
         d.fulfill();
      });
      return d.promise;
}

3 个答案:

答案 0 :(得分:4)

分配:

  

studArr [j] [k + 1] = studName;

存储指向char [] studName的指针。 您应该为每个实例分配内存,例如:

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

注意:记得释放已分配的内存。

答案 1 :(得分:2)

studName是一个指针,每个studArr[j][N]都被设置为相同的指针。指针找到的内容正在更新,但同一指针的所有重复副本仅显示最后一个内容。

您可能需要使用strncpy()等。具体细节实际上取决于您尚未显示的代码,如声明。

答案 2 :(得分:1)

我的猜测是因为你指定所有指针指向strdup,它总是包含最后一个读取字符串。

您需要复制字符串,而不是仅指定指针。使用Car(这意味着您必须稍后释放内存)或使每个条目成为一个数组并复制到其中。