空间分隔文件到结构数组C中

时间:2012-12-12 06:29:58

标签: c arrays structure

我想在文件结构中存储信息。我的文件由行(每行必须是不同的结构)和列组成,每列是不同的数据。文件看起来像这样:

1 AB
2 CD
3 CD
4 AB

我的结构是这样的(其中节点号是第一个整数,节点类型是两个字母):

struct nodes{
int nodeNumber;
char nodeType[2];
};

到目前为止,我的代码是:

lines = lineCount(nodes); //calculates how many lines file has
struct nodes node[lines]; //creates structure array
no = fopen(nodes, mode);
if(no == NULL){
    printf("Can't find the files.");
    exit(1);
}else{
    for(i = 0; i < lines; i++){
        fscanf(no, "%d %2c \n", &id, current);
        node[i].nodeNumber = id;
        strcpy(node[i].nodeType, current);
    }
}

当我调试当前值是这样的:当前= \“AB \ 000 \ 000 \ 000 \ 000 \ 000 \ 000 \ 000 \ 000 \ 000 \ 000 \ 000 \ 000 \ 000 \ 000 \ 000 \ 000 \ 000 \ 000 \ 000 \ 000 \ 000 \ 000 \ 000 \ 000 \ 000 \ 000 \ 000 \ 000 \ 000 \ 000 \ 000 \ 000 \ 000 \ 000 \ 000 \ 000 \ 000 \ 000 \ 000 \ 000 \ 000 \ 000 \ 000 \ 000 \ 000 \ 000 \ 000 \ 000 \ 000 \ 000 \ 000 \ 000 \ 000 \ 000 \ 000 \ 000 \ 000 \ 000 \ 000 \ 000 \ 000 \ 000 \ 000 \ 000 \ 000 \ 000 \ 000 \ 000 \ 000 \ 000 \ 000 \ 000 \ 000 \ 000 \ 000 \ 000 \ 000 \ 000 \“而不仅仅是AB

任何想法?

2 个答案:

答案 0 :(得分:1)

问题在于您使用strcpy。它复制 string ,即带有终结符的字符数组。这意味着strcpy将复制,直到它看到字符串终结符字符'\0' 将其放在数组的末尾,这意味着您将覆盖数组外的一个字节

使用逐个字符手动复制,memcpy之类的函数,或者将数组的大小增加到三个,以便它可以适合终止字符(这意味着你必须确保{{}的定义1}}也是大小为3,带有字符串终止符。)

答案 1 :(得分:0)

scanf不会终止使用%c格式代码读取的字符。 (虽然显然current有很多NUL,但我不知道你是否可以指望它。

您应将current声明为char[2],并使用长度为2而不是memcpy的{​​{1}}。