c - char 指针 (strdup) 时使用 printf 的段错误

标签 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]). 

背后的原因是什么?

最佳答案

这是因为 argv 不是一个字符串,它是一个字符串数组,所以 strdup 不是复制它的正确函数。你需要按照以下方式做一些事情:

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

其中argcargv中的元素个数。您还需要释放所有元素,然后在完成后释放数组本身。

关于c - char 指针 (strdup) 时使用 printf 的段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28655224/

相关文章:

可由文件控制的C调试器

反转字符串的 C 代码 - 包括字符串末尾的 NULL 字符

c - 未分配的变量具有随机值

c - 合并 C Dll 的最简单方法。有来源

c - 在内核中添加中断服务例程

c - 图像数据如何/为什么存储为 char - OpenCV

windows - 是否保证在每个使用它的进程中将相同的 DLL 映射到相同的虚拟地址?

将指针地址转换为 char 数组并使其成为小端

c++ - 自定义 QDialog 在 exec() 时导致段错误

c - 为什么这个有序链表插入段错误?