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

标签 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?也许有人可以告诉我哪里做错了并解释原因?

感谢您花时间阅读它:)

最佳答案

问题是这样的:

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

还有这个:

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

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

只需删除地址运算符,您就可以读取最多五个字符(加上终止符)的字符串。

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

相关文章:

c - 在结构数组上重新分配,索引时地址边界错误

c - 如何访问指针结构中的字符串?

c++ - 为什么这会给我一个访问冲突? (C++)

javascript - 从数组中删除元素(待办事项列表应用程序)

c++ - 重访 vector 、指针、兔子和回收内存

linux - LKM 驻留在堆中吗?

c - C中使用指针的子字符串

c - 虽然循环等待全局变量不触发

c - 验证时间(hh :mm formate in C)

javascript - 创建数组的 JavaScript 搜索