【问题标题】:Mallocing a two dimensional array, crashing after trying to print strings分配二维数组,尝试打印字符串后崩溃
【发布时间】:2017-02-18 20:42:44
【问题描述】:

我想要一个动态的字符串数组,所以是指向数组指针的指针。 这是我的代码(我的程序在打印后崩溃):

typedef struct person{
    char *name;
    char **children;
    struct person *nextPerson;

}Person;

int main( ){
    int kidsNum = 1;
    int i;
    Person *first = (Person*)malloc(sizeof(Person));
    first->name = "George";
    first->children = malloc(kidsNum * sizeof(char*));
    for (i = 0; i < kidsNum; i++){
        //every string consists maximum of 80 characters
        (first->children)[i] = malloc((80+1) * sizeof(char));
        scanf("%s",((first->children)[i]));
        printf("%s",(*((first->children))[i]));
    }
}

它在 printf 之后崩溃,我不知道它是否因为错误的 mallocing 而崩溃,或者我不知道如何在场景中正确打印字符串。

【问题讨论】:

  • scanf & printf 的参数应该和打印字符数组一样/
  • printf("%s",(*((first-&gt;children))[i])); --> printf("%s\n", first-&gt;children[i]);
  • 编译时启用所有警告

标签: c pointers multidimensional-array malloc


【解决方案1】:

当你取消引用一个指针(这就是((first-&gt;children)[i]))时,你会得到指针所指向的内存的值。

在您的情况下,(*((first-&gt;children))[i])单个字符(即 char)而不是字符串。尝试将其打印为字符串会导致未定义的行为并可能导致崩溃。

不要取消引用指针:

printf("%s",first->children[i]);

【讨论】:

    猜你喜欢
    • 2015-08-22
    • 1970-01-01
    • 1970-01-01
    • 2016-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-07
    相关资源
    最近更新 更多