我正在尝试解析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]);
}
由于编译并运行此程序,导致出现段错误。
答案 0 :(得分:2)
数组two
在malloc
之后保留32个字符指针的空间。
但是,这些指针尚未初始化,目前还没有指向有效的已分配内存。
因此,strcpy
本质上具有一个目的地(two[0]
),该目的地是一些未知的未初始化值。指针本质上是存储在内存中的值。在这种情况下,值就是抢夺。
由于非法的内存访问,strcpy
对垃圾地址的写入会产生SEGFAULT。
要解决此问题,请确保目标(two[0]
)指向合法的可写缓冲区(也许two[0] = malloc(128 * sizeof(char))
)。
在相关说明中,查找类似(但更安全)的功能strncpy
。