使用printf进行分段错误时的char指针(strdup)

时间:2015-02-22 06:32:50

标签: c pointers segmentation-fault printf

我是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]). 

背后的原因是什么?

1 个答案:

答案 0 :(得分:1)

这是因为argv不是字符串,它是一个字符串数组,因此strdup不是复制它的正确函数。你需要做一些事情:

newray = malloc(sizeof(char*) * argc);
for (size_t i = 0; i < argc; ++ i) newray[i] = strdup(argv[i]);

argcargv中元素的数量。完成后,您还需要释放所有元素,然后释放数组。