-1

我正在尝试解析一个 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]);
}

由于编译和运行它,我得到了段错误。

4

1 回答 1

2

该数组twomalloc. 但是,这些指针是未初始化的,此时并不指向有效分配的内存。

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

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

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

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

于 2019-05-27T16:22:19.510 回答