C 在动态二维字符数组中插入字符串或(char*),段错误

标签 c arrays string dynamic allocation

所以我需要编写一个二维 char 数组,该数组需要从一些子进程中填充。我不知道运行时会返回多少行。

我编写了一个程序,对于插入的前三个字符串(或 char*)效果很好,但之后我遇到了段错误错误。数组应该保留其中的值/字符串。代码如下:

全局行数:

static int rows = 1;

数组初始化:

char **output = (char **)malloc(sizeof(char*) * 1);
output[0] = (char *)malloc(sizeof(char) * 1023);
output[0][0] = '#'; 

添加:

char foo[1023];
insertArray(output, "bbb");
insertArray(output, foo);
insertArray(output, "bbb");
insertArray(output, "bbb");

实际上前 3 次效果很好

功能:

static void insertArray(char **c, char *itemToInsert) {

    if (c[0][0] == '#') {
        strncpy(c[0], itemToInsert, 1023);  
    }
    else {

        c = (char **)realloc(c, (rows + 1) * sizeof(char*));
        for (int i = 0; i < rows+1; i++) {
            c[i] = realloc(c[i],sizeof(char) * 1024);
        }
        strcpy(c[rows], itemToInsert);
        rows++;
    }

}

我就是不知道出了什么问题

最佳答案

您丢失了重新分配的结果,下次您尝试使用旧指针来输出时。

你可以像这样重新设计:

output = insertArray(output, ...);
output = insertArray(output, ...);
output = insertArray(output, ...);
...

static char **insertArray(char **c, char const *itemToInsert)
{
    ...
    return c;
}

关于C 在动态二维字符数组中插入字符串或(char*),段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40804273/

相关文章:

c - .lib 文件与仅使用 ar 创建的 .a 文件有何不同?

python - 数组的赋值会改变数组本身

string - 在 Scala 中使用 '==' 代替 equals 进行字符串比较

c - 我无法退出我的程序

c - 为什么这个 GNU C 可变参数函数会返回一个巨大的数字?

c - 这相当于 C 中的复合赋值吗?

java - 矩阵乘法错误 : incompatible types (float to int)

javascript - 如何检查一个值是否存在于具有多个对象的数组中 - javascript?

循环中字符串的 Python 行为

c# - 使用定界符拆分字符串,但在 C# 中保留结果中的定界符