1

我想将文件中的信息存储在结构中。我的文件由行(每一行必须是不同的结构)和列组成,每一列都是不同的数据。文件如下所示:

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);
    }
}

当我调试当前值是这样的: 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\" 而不仅仅是 AB

有任何想法吗?

4

2 回答 2

1

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

使用手动逐个字符复制一个函数,例如,或者将数组的大小增加到三个以便它可以适合终止memcpy字符(这意味着您必须确保current)。

于 2012-12-12T06:51:54.577 回答
0

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

您应该声明currentchar[2],并使用memcpy长度为 2 而不是strcpy.

于 2012-12-12T06:48:21.750 回答