对字符串数组使用动态内存分配

时间:2017-07-06 08:43:52

标签: c arrays dynamic-memory-allocation

我刚开始学习C,所以如果可以,请不要对我这么努力。 我正在尝试学习如何为数组分配内存,所以我开始喜欢这样的东西。我只想动态地为字符串数组分配内存,然后显示它。

int main( )
{
    int number, i;
    scanf ("%d", &number);
    char **table =(char **) malloc(number*sizeof(char*));
    for(i=0; i<number; i++)
    {
        table[i] = (char *)malloc(6);
    }

    for(i=0; i<number; i++)
    {
        scanf("%s", &table[i]);
    }

    for(i=0; i<number; i++)
    {
        printf("Person nr %d : %s ", i+1, &table[i]);
    }

    for(i=0; i<number; i++)
    {
         free(table[i]);
    }
    free(table);
    return 0;
}

但程序仅在我输入3个或更少字母的单词时才有效。所以,我不知道我是否有内存分配问题,或者我可能无法使用%s打印** char?也许有人可以告诉我我做错了什么并解释原因?

感谢您花时间阅读它:)

2 个答案:

答案 0 :(得分:4)

问题在于:

scanf("%s", &table[i]);

和此:

printf("Person nr %d : %s ", i+1, &table[i]);

您似乎忘记table[i] 是指向char 的指针,这是字符串基本上是什么。通过使用&table[i],您可以获得指向的指针,其类型为char **。您基本上将指针本身视为字符串,而不是它指向的内存。

只需删除address-of运算符,即可读取最多五个字符的字符串(加上终结符)。

答案 1 :(得分:0)

&table[i]的类型为char**table[i]的类型为char*table[i]是字符串的指针。 您应该将&table[i]更改为table[i]