我试着写了这段代码,但是我发现了memcpy的分段错误(我试着用debug查看代码)
FILE *tp;
int l = 0;
while ((fgets(buffer, sizeof buffer, tp))) {
// search equal sign
char *equalsign = strchr(buffer, '=');
l++;
// search quote near value
char *q1 = equalsign + 1;
char *q2 = strchr(q1 + 1, '"');
// extract name and value
char* names = strndup(buffer, equalsign - buffer);
char* values = strndup(q1 + 1, q2 - q1 - 1);
memcpy(g_names,names,strlen(names));
memcpy(g_values,values,strlen(values));
free(names);
free(values);
}
具有
const char* g_names[SIZE] = { 0, };
char* g_values[SIZE] = { 0, };
char buffer[MAXLINE] = {0,};
定义为全局。通过调试,我发现问题出在memcpy(分段错误)。有人有什么建议吗?
谢谢。
当做。
最佳答案
您的代码至少有两个问题:第一,它使用g_names
作为memcpy
的目标,它将字符复制到指针数组上。您应该复制到g_names[l]
(假设l
是g_names
数组中的索引)。
其次,您的代码缺少g_names[l]
的实际分配,例如:
g_names[l] = malloc(strlen(names) + 1);
但由于您无论如何都要调用
strndup
,所以您只需将该调用的结果存储到数组中: // search for equal sign
char *equalsign = strchr(buffer, '=');
// search quote near value
char *q1 = equalsign + 1;
char *q2 = strchr(q1 + 1, '"');
// extract name and value
g_names[l] = strndup(buffer, equalsign - buffer);
g_values[l] = strndup(q1 + 1, q2 - q1 - 1);
l++;
关于c - memcpy,段错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26665069/