我一直在挣扎这个愚蠢的时间。 基本上,我需要将一个char指针数组复制到另一个char指针数组。
现在,我有这个功能:
void copyArray(char *source[], char *destination[]) {
int i = 0;
do {
destination[i] = malloc(strlen(source[i]));
memcpy(destination[i], source[i], strlen(source[i]));
} while(source[i++] != NULL);
}
这会导致分段错误。有人可以帮忙吗?
谢谢!
编辑:示例程序
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
// Copy the contents of one array into another
void copyArray(char *source[], char *destination[]){
// printf("In copy array");
int i = 0;
do {
destination[i] = malloc(strlen(source[i]));
memcpy(destination[i], source[i], strlen(source[i]));
} while(source[i++] != NULL);
}
void addToHistory(char *history[][40], char *args[]){
int i;
for(i = 1; i < 10; i++){
copyArray(history[i], history[i-1]);
}
i = 0;
copyArray(args, history[0]);
}
int main(void){
char *history[10][40];
char *args[40];
history[0][0] = NULL;
args[0] = "ls";
args[1] = NULL;
addToHistory(history, args);
}
答案 0 :(得分:1)
确保source
数组中的最后一个元素为NULL
,然后再将其传递给copyArray
。
在copyArray
中,添加while
代替do
,仅增加i
在结尾
相反以上所有内容,您只需在功能i++
中将++i
更改为copyArray
。
但如果传递给此函数的source
数组中的第一个元素为NULL
,它将会崩溃。
答案 1 :(得分:0)
我认为你有一个错误的错误:
do {
destination[i] = malloc(strlen(source[i]));
memcpy(destination[i], source[i], strlen(source[i]));
} while(source[i++] != NULL);
^^^
你在之后检查我是否 NULL ,然后结束循环。尝试用
替换它} while (source[++i] != NULL); // or while (source[++i]), for short
您可以尝试在每次迭代后记录一条短消息,以查看代码出错的位置。
修改:您是否有理由使用memcpy()
(不会复制终止'\0'
)而不是strcpy()
(将会)?
(注意@wildplasser:我相信strdup()
可能不是标准C)。
答案 2 :(得分:0)
void copyArray(char *source[], char *destination[]) {
while ((*destiantion = *source)) {
*destination++ = strdup( *source++ );
}
}
BTW:将目的地作为第一个参数是常见的,就像在strcpy()
void copyArray(char *destination[], char *source[]) { ... }