我想在文件结构中存储信息。我的文件由行(每行必须是不同的结构)和列组成,每列是不同的数据。文件看起来像这样:
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
任何想法?
答案 0 :(得分:1)
问题在于您使用strcpy
。它复制 string ,即带有终结符的字符数组。这意味着strcpy
将复制,直到它看到字符串终结符字符'\0'
和将其放在数组的末尾,这意味着您将覆盖数组外的一个字节
使用逐个字符手动复制,memcpy
之类的函数,或者将数组的大小增加到三个,以便它可以适合终止字符(这意味着你必须确保{{}的定义1}}也是大小为3,带有字符串终止符。)
答案 1 :(得分:0)
scanf
不会终止使用%c
格式代码读取的字符。 (虽然显然current
有很多NUL,但我不知道你是否可以指望它。
您应将current
声明为char[2]
,并使用长度为2而不是memcpy
的{{1}}。