c - C中动态分配的字符串数组

标签 c arrays malloc

我想了解动态分配的数组在 C 99 中是如何工作的。无论如何,我有以下代码:

int main()
{
    char** members=malloc(4*sizeof(*members));
    *members=malloc(5);
    *members="john";
    *(members+1)="shouldn't work";
    printf("%s \n",*members);
    printf("%s",*(members+1));
    return 0;
}

我以为我会得到一个运行时错误,因为我没有分配 (members+1),但实际上它确实打印了“john”和“shouldn't work”,而且,它看起来像 *members= malloc(5) 行不是必需的。为什么?

最佳答案

您的作业并没有按照您认为的那样进行。当您分配 *members*(members+1) 时,您是将 char* 分配给每个字符串文字,而不是将其复制到已分配(或未分配)堆内存。

如果您用 strcpy 替换您的作业,即:

strcpy(*members, "john");
strcpy(*(members+1), "shouldn't work");

然后您将在第二次分配时遇到访问冲突,但不会在第一次分配时发生。同样,malloc(5) 似乎没有必要的原因是您将指针重新分配为指向字符串文字,而不是将“john”字符串复制到分配的内存中。

关于c - C中动态分配的字符串数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29814001/

相关文章:

c - 如何在c中进行hex8编码?

c - 对同一数组的两个不同部分进行排序 C

c - C中malloc引起的内存泄漏

c - 为什么我不应该在 malloc() 未分配的变量上调用 free()?

c - 指针作为函数参数?

c - C 中 shell 实现中的多个管道

java - Array 到 List 或 List 到 Array,哪个转换更快?

java - 将正则表达式与数组进行匹配

javascript - 带有 ChartJS 的 Vuejs 从 API 填充

c - `Cannot find -lmalloc`,错误 : ld returned 1 exit status