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

时间:2019-05-27 16:15:52

标签: c string parsing malloc arrayofstring

我正在尝试解析C字符串数组,将单词的一部分分配给一个字符串数组,将另一部分分配给另一个数组。但是,当我使用strcpy函数时,会出现segfault。知道如何解决这个问题吗?

#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]);
}

由于编译并运行此程序,导致出现段错误。

1 个答案:

答案 0 :(得分:2)

数组twomalloc之后保留32个字符指针的空间。 但是,这些指针尚未初始化,目前还没有指向有效的已分配内存。

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

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

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

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