我是 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]).
背后的原因是什么?
最佳答案
这是因为 argv
不是一个字符串,它是一个字符串数组,所以 strdup 不是复制它的正确函数。你需要按照以下方式做一些事情:
newray = malloc(sizeof(char*) * argc);
for (size_t i = 0; i < argc; ++ i) newray[i] = strdup(argv[i]);
其中argc
是argv
中的元素个数。您还需要释放所有元素,然后在完成后释放数组本身。
关于c - char 指针 (strdup) 时使用 printf 的段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28655224/