将一个字符串数组分配给另一个字符串

assigning an array of strings to another one

我正在尝试解析一个 C 字符串数组,将一部分单词分配给一个字符串数组,将另一部分分配给另一个数组。但是当我使用 strcpy 函数时,我得到了段错误。知道如何解决这个问题吗?

#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>

int main(int argc, char *argv[])  {
    char **one = malloc(16 * sizeof(char*));
    char **two = malloc(32 * sizeof(char*));

    one[0] = "string";

    strcpy(two[0], one[0]);

    printf("%s\n", two[0]);
}

作为编译和 运行 这个的结果,我得到了段错误。

数组 two 包含 space malloc 之后的 32 个字符指针。 但是,这些指针未初始化,此时未指向有效分配的内存。

因此,strcpy 本质上有一个目的地 (two[0]),它是一些未知的、未初始化的值。指针本质上是存储在内存中的值。在这种情况下,价值是抢夺。

由于非法内存访问,strcpy 对垃圾地址的写入产生了 SEGFAULT。

要解决此问题,请确保目标 (two[0]) 指向合法的可写缓冲区(可能 two[0] = malloc(128 * sizeof(char)))。

在相关说明中,查找类似(但更安全)的函数 strncpy