c - 空格分隔的文件到结构数组 C

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

当我调试当前值时: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/

相关文章:

c - 函数指针和必要性

c - 我需要这个队列来显示学生 ID 和姓名,我该如何解决这个问题?

c++ - BITCOUNT 宏需要解释

c - C exit() 的奇怪行为

c - 不使用除法运算符将数字除以 5

Python Ctypes 将 void 指针转换为 nonetype 和 long。有什么影响?这是什么意思?

c - 如何创建外部结构并定义其 typedef

javascript - 无法使用在 Angular 7 中创建的自定义管道进行搜索

javascript - 如果对象值为 true 并且键在数组中,则获取对象键。 JavaScript

ruby - 为什么在 Ruby 中将散列插入数组必须使用括号?