我是C编程的新手。我写了一个函数
void fun (char** argv, int count, int loc);
在我的函数中,我尝试通过
创建另一个数组char** newray=strdup(argv).
当我尝试执行时:
printf(newray[0])
我遇到了分段错误。我通过
修复了它printf("%s\n", newray[0]).
但是,要输出argv[0]
,我只需要这样做:
printf(argv[0]).
背后的原因是什么?
答案 0 :(得分:1)
这是因为argv
不是字符串,它是一个字符串数组,因此strdup不是复制它的正确函数。你需要做一些事情:
newray = malloc(sizeof(char*) * argc);
for (size_t i = 0; i < argc; ++ i) newray[i] = strdup(argv[i]);
argc
是argv
中元素的数量。完成后,您还需要释放所有元素,然后释放数组。