c - 段错误 : Pointer to an array of string

标签 c arrays string pointers segmentation-fault

<分区>

我有一个字符串数组 (char **),它被初始化为 NULL。在我尝试访问它的元素时传递它的地址后,它给出了段错误。

//following code
#include <stdio.h>
#include <stdlib.h>
#include <string.h>


void parse(char ***test, char *str)
{
    int i;
    *test = (char**)malloc(sizeof(char*) * 3);
    for(i=0; i<3; i++)
    {
        *test[i] = (char*) malloc(sizeof(char)*(strlen(str)+1));
        strcpy(*test[i], str);
    }
}

int main(void)
{
    int i;
    char *str = "Hello world";
    char **test = NULL;
    parse(&test, str);
    for(i=0; i<3; i++)
        printf("%s\n", test[i]);
    return 0;
}

在函数内部使用调试器解析时,所有元素都有正确的值并正确初始化和分配,但从主函数只有 0 索引行给出正确的值,其余是段错误。

最佳答案

*test[0] 应该是 (*test)[i]

http://en.cppreference.com/w/c/language/operator_precedence表示 [] 的优先级高于 *,这不是您想要的。

您也不应该覆盖索引 0。

sizeof(char) 始终为 1,因此您可以将其保留。您也不应该强制转换 malloc 的返回值并测试是否成功。

关于c - 段错误 : Pointer to an array of string,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31609668/

相关文章:

c - 总线错误,不知道该怎么办

javascript - 在 chrome.storage 中存储复杂对象

javascript - 为什么将 0 作为数组的第一个元素会阻止 "for"循环执行。 [JavaScript]

c - 如果上一个命令失败,GDB 命令将停止执行

c++ - 在 Linux 中学习 C/C++/Assembly 我应该去哪个 Linux 发行版

c - 如何将整数数组转换为排列并计算其中的循环?

swift - 如何获取 Double 小数点后的第一个数字?

java - 如何获取字符串中的单词?

java - 在Java中将字符串绘制到图像

我可以使这个包含很多 OR 的 if 语句更简洁吗?