这里的问题是每当我更改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;
}
答案 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
(这意味着您必须稍后释放内存)或使每个条目成为一个数组并复制到其中。