所以我有这段代码:
dhall format
但是,当我像这样打印数组的内容时:
char inte[10];
while(j<noinput) {
fscanf(circuit,"%s",inte);
vararray[count]=inte;
count++;
j++;
}
前两个元素之后的元素(保留给特殊元素)都等于我早些时候从fscanf获取的LAST字符串。我只设置
时,不知道fscanf中的字符串之一如何等于数组中的多个插槽for (h=0;h<noinput+2;h++){
printf("%dth variable: %s\n",h,vararray[h]);
}
这不是意味着数组的每个元素都会有所不同,因为我每次都会增加计数吗?我感到很困惑。我也尝试这样做:
vararray[count]=inte;
但是这也不起作用,并且为某些索引提供了空元素。
答案 0 :(得分:0)
您没有复制字符串。这是正在发生的事情:
char *vararray[462]; // declare an array of string pointers
char inte[10]; // declare a char array (to function as a string)
for (int i = 0; i < 462; i += 1) {
// do something
vararray[i] = inte;
}
这导致vararray
的所有项目都指向也称为inte
的内存...但是您每次都覆盖它!相反,请执行以下操作:
#include <string.h> // write me at the top, outside main()!
char vararray[462][10]; // declare an array of strings (max length 9)
char inte[10]; // declare a char array (to function as a string)
for (int i = 0; i < 462; i += 1) {
fscanf(circuit,"%10s",inte); // use buffer size to make xscanf safer
strncpy(vararray[i], inte, 9); // copy inte, making sure not to buffer overflow!
vararray[i][9] = '\0'; // if inte is too big, a null byte won't be added to the end of the string; make sure that it's there
}
这将复制字符串!当您这样做时,您的问题应该消失了。
答案 1 :(得分:0)
您做错了什么。通过“ vararray [count] = inte;”您正在执行指针分配,因此所有vararray都被同一字符串填充。我想您是C的新手,因此我将回答。正确的方法如下所示
固定尺寸解决方案:
char vararray[ROWCOUNT][BUFFERSIZE];
for(count=0; j<noinput; ++count, ++j) {
fscanf(circuit,"%s",(char*)vararray[count]);
}
具有动态内存管理
char * vararray[ROWCOUNT];
for(count=0; j<noinput; ++count, ++j) {
vararray[count] = (char*)malloc(BUFSIZE);
fscanf(circuit,"%s", vararray[count]);
}
我想以成为当今C专家的方式警告您,这有点疯狂,我的意思是除非您有其他选择。下面我放的示例和您写的东西是完全不安全和不安全的...