我想在结构中存储文件中的信息。我的文件由行(每行必须是不同的结构)和列组成,每列都是不同的数据。文件看起来像这样:
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
有什么想法吗?
最佳答案
问题是您对 strcpy
的使用。它复制 string,即带有终止符的字符数组。这意味着 strcpy
将复制直到它看到字符串终止符 '\0'
并 将其放在数组的末尾,这意味着您将覆盖数组外的一个字节。
要么使用手动逐字符复制,memcpy
等功能,或将数组的大小增加到三个,以便它可以容纳终止符(这意味着您必须确保 current
的定义也是大小为 3,并带有字符串终止符)。
关于c - 空格分隔的文件到结构数组 C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13834078/