c - 更改数组数据的函数 - 数据不变。 C

标签 c arrays pointers reference populate

我是 C 的新手,但几周前我已经用 pascal 编程了。在 Pascal 中,如果您想更改数组数据,您可以通过引用传递,本质上是通过键入 var myArray。我不知道如何在 C 中执行此操作。我已经阅读了很多问题,但似乎都没有用。这是我目前所拥有的。

void set_up_elements(char (*array_to_populate)[20])
{
    char* buffer;
    FILE *f;
    f=fopen("elementList.txt","r");
    char copied_text[118][20];
    int i=0;
    while (!feof(f))
    {
        fgets(copied_text[i],80,f);
        ++i;
    }
    //Close the file to free up memory and prevent leaks
    fclose(f);
    f = NULL;
}

这是我填充数组的代码,我将元素周期表中的元素列表读取到数组 copied_text 中。这部分有效,它成功地填充了函数内部的数组。

int main()
{
    char element_array[118][20];
    set_up_elements(element_array);
<..>
}

这就是我尝试调用它的方式。数组 element_array 的内容不会改变。有谁知道如何解决这一问题?谢谢。

最佳答案

1)下面一行是错误的

fgets(copied_text[i],80,f);

字符串数组中一个元素字符串的大小是20。并且您在 fgets() 函数中输入的最大字符数为 80

所以把它改成:

fgets(copied_text[i],sizeof(copied_text[0]),f);

2) 您可以更改此代码:

while (!feof(f))
    {
        fgets(copied_text[i],80,f);
        ++i;
    }

while (i<118 && fgets(copied_text[i++],80,f));

3) 函数的输入参数

void set_up_elements(char (*array_to_populate)[20])

未在您的函数中使用。似乎您想将其填充到您的函数中,但事实并非如此,您正在使用调用者无法看到的另一个数组(本地数组)

关于c - 更改数组数据的函数 - 数据不变。 C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16196965/

相关文章:

c - C语言中if(i-2)是什么意思?

c - 在文本文件中搜索电子邮件

c - 如何在定义的位置附加一个字符

C++ 需要从数组中删除某些值

javascript - 从 JavaScript 中的文本文件加载数组声明

c struct指针数组分配sigsegv

c# - C# 中如何表示不安全指针

c++ - 具有动态分配内存的 C++ 对象的参数传递

c - 查找超过 1 个输入字符串的长度

arrays - 新人需要帮助获得正确的正则表达式