我希望下面的代码可以工作。它编译(gcc),但执行结果会给出Segmentation fault: 11。怎么会?谢谢

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MAX_INDEX_LENGTH 20

main()
{
    char **indici;
    int n = 4;

    indici = (char **)malloc(n * sizeof(char*));
    int i;
    for (i = 0; i < n; i++)
    {
        indici[i] = (char *)malloc(MAX_INDEX_LENGTH * sizeof(char*));
    }

    strncpy(indici[0], "aaa", MAX_INDEX_LENGTH);
    strncpy(indici[0], "bbbb", MAX_INDEX_LENGTH);
    strncpy(indici[0], "ccccc", MAX_INDEX_LENGTH);
    strncpy(indici[0], "ddddddd", MAX_INDEX_LENGTH);

    for (i = 0; i < n; i++)
    {
        printf("Index %d is %s\n", n, indici[n]);
    }
}

最佳答案

您正在将所有字符串复制到indici[0]中,因此其他3未初始化。
打印未初始化的文件时,kaboom。

关于c - 字符串数组中的C段错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9045514/

10-11 21:19