提问人:An Assembler 提问时间:10/9/2023 更新时间:10/9/2023 访问量:70
将 char * 数组深度复制到结构中?
Deep copy char * array into struct?
问:
这可能是一个非常初学者的问题,所以请放轻松......
我有一个结构体数组,如下所示
struct Data {
int lineno;
char* line[10];
}
struct Data datas[20] = {{ 0, NULL }};
我正在尝试将 char * [] 深度复制到数组元素中,但我不断出现 seg 错误。
我尝试了以下方法
for (int i = 0; i < 20; i++) {
strcpy(datas[slot].line[i], line[i]);
}
但这行不通。 我以为我的问题是试图在行中复制空值,所以我尝试了以下操作
for (int i = 0; i < 20; i++) {
if (line[i])
strcpy(datas[slot].line[i], line[i]);
}
但这也行不通。
答:
2赞
Ted Lyngmo
10/9/2023
#1
在复制字符串之前,您需要分配内存。大多数实现都支持分配内存和复制字符串:strdup
for (int i = 0; i < 20; i++) {
datas[slot].line[i] = strdup(line[i]);
}
如果您的实现不支持 ,您可以创建自己的:strdup
#include <stdlib.h>
char *StrDup(const char* str) {
size_t len = strlen(str) + 1;
char *res = malloc(len);
if (res) memcpy(res, str, len);
return res;
}
评论
0赞
An Assembler
10/9/2023
我试过这个,但仍然得到一个段错误......
0赞
Ted Lyngmo
10/9/2023
@AnAssembler 在这种情况下,也不指向分配的内存。如何定义和初始化?line[i]
line
1赞
An Assembler
10/9/2023
是的,似乎是这样......谢谢
0赞
Ted Lyngmo
10/9/2023
@AnAssembler 不客气!很高兴它有帮助!
0赞
Chris
10/9/2023
OIP 的结构体有一个包含 10 个字符指针的数组。OP 的代码从 0 循环到 19,并使用它来索引成员数组。这似乎也是段错误的合理原因。i
line
评论
datas[slot].line[i]
i
line[i]
strlen
datas[slot].line[i] = malloc(length_you_got)