c - 如何将临时值分配给二维数组

标签 c arrays csv multidimensional-array struct

所以我有一个二维结构数组,用于存储 csv 文件中的数据。我正在从文件中读取字符串,然后我想将它们在二维数组中的值指定为该字符串。因此,例如位置 [0][0] 将是“红色”,位置 [1][1] 将是“蓝色”或其他。问题是我正在从文件中读取字符并将它们存储在临时字符串中,然后我想将该临时字符串值分配给我所在的当前位置。所以我将温度设置为“红色”,我希望 [0][0] 为“红色”,然后它从文件中读取更多内容,并且温度现在为“蓝色”,我希望 [0][1] 为“蓝色” ”。当我分配 [0][0]=temp ,然后 [0][1]=temp 时,它们会互相覆盖(因为它是一个指针)。我已经尝试过 strdup(temp) 但这似乎并不能解决问题,或者它们有时仍然会互相重写。我知道我可以使用 strcpy 但对于 strcpy 我必须有另一个字符串来将其复制到,所以我尝试每次只创建一个新的 char 数组,但这也不起作用。它仍然被重写。我知道如果每次分配一个值时我都创建一个具有新名称的新 char 数组并指向该 char 数组,我可以解决这个问题,但这是针对一个非常大的 csv 文件,所以我将不得不创建大约 1000 万个char 数组,我不知道该怎么做,似乎应该有一个更简单的方法。

非常感谢任何帮助,谢谢!

struct node {
    char* value;
};

char temp[500];
struct node ** arrayofnodes[35];
for(int i=0; i<35; i++) {
    arrayofnodes[i] = malloc(test * sizeof (struct node));
    for(int j=0; j<test; j++) arrayofnodes[i][j] = malloc(sizeof (struct node));
}


//(all of this below happens inside a function because it is going to be called like 10 million times)
    arrayofnodes[row][count]->value=temp; //way 1
    arrayofnodes[row][count]->value=strdup(temp); //way 2
    char fun[500];
    strcpy(fun,temp);
    arrayofnodes[row][count]->value=fun;//way 3

最佳答案

arrayofnodes[i] = malloc(N * sizeof (struct node)); 为 N 个结构留出足够的空间。你想要的是 N 个结构指针的空间。

但是我不认为这是你的主要问题。只有“方式 2”有效 - 您确实需要为您读取的每个新字符串创建存储。 “way 1”是复用temp存储,“way 3”是复用'fun'存储,一旦退出该函数就会失效。

如果“方式 2”不适合您,我会查看生成 rowcount 的代码。这些索引是否总是分别小于 35test

关于c - 如何将临时值分配给二维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55151069/

相关文章:

使用 Netfilter 检查 Linux 内核模块中的端口号

arrays - HackerRank 产品分布

sql - Redshift SQL - 反向 Listagg 函数

r - 在 R 中合并 CSV 文件和不匹配的文件头

javascript - 在 IE9 或更高版本中从 Javascript 导出 excel 或 csv 文件的任何方法

c - 使用 Xlib 获取鼠标点击坐标

收集数字并打印出来

c - 如何正确排序数组?

Python:使用生物萨伐尔定律计算电线的磁场

c++ - 具有巨大数组的 Kmeans