如何将文件中的字符串放入C中的数组

时间:2018-11-23 18:18:53

标签: c arrays string

所以我有这段代码:

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;

但是这也不起作用,并且为某些索引提供了空元素。

2 个答案:

答案 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专家的方式警告您,这有点疯狂,我的意思是除非您有其他选择。下面我放的示例和您写的东西是完全不安全和不安全的...