编辑,弄清楚了。新代码如下:

  void add_card_to_rolodex(card *card_array)
{
        card newcard = {"", "", ""};
        char newuser[250];
        scanf(" %[^\n]%*c", newuser);
        strcat(newuser, "\n");
        newcard.last_name = strdup(strtok(newuser, " "));
        newcard.first_name = strdup(strtok(NULL, " "));
        newcard.phone_number = strdup(strtok(NULL, " "));

        card_array[size] = newcard;
        size++;

}

旧代码:
void add_card_to_rolodex(card *card_array)
{
        //Function asks for input and adds it to the passed array
        //card is a struct of char *
        card *newcard = malloc(sizeof(newcard));
        char newuser[250];
        scanf(" %[^\n]%*c", newuser);
        strcat(newuser, "\n");

        newcard->last_name = strdup(strtok(newuser, " "));
        newcard->first_name = strdup(strtok(NULL, " "));
        newcard->phone_number = strdup(strtok(NULL, " "));

        //size is global
        card_array[size] = *newcard;
        size++;
        free(newcard);

}

我正试图添加到一个文件的末尾,该文件先前已读入数组。
这是调用此函数之前的原始输出。
...
81韦莱兹英格丽(648)685-8104
82沃伦·布菲(570)247-2921
83沃森维拉(640)276-5047
84怀特黑德韦恩(681)747-8152
85冬季达米安(790)348-2599
86约克基思(592)276-6850
87萨莫拉迪安(281)906-9590
假设我用输入调用函数3次:
鲍勃·琼斯818
吉姆J 616
Foo酒吧123
当我再次打印阵列时,我得到:
81韦莱兹英格丽(648)685-8104
82沃伦·布菲(570)247-2921
83沃森维拉(640)276-5047
84怀特黑德韦恩(681)747-8152
85冬季达米安(790)348-2599
86约克基思(592)276-6850
87萨莫拉迪安(281)906-9590
88岁?J?我呢?琼斯818
89吉姆·琼斯616
90 Foo酒吧123
如您所见,在第88行,输出以?J?我呢?…以下所有输入都正常。
我读到这与不可读的价值观有关,但我完全搞不清另外发生了什么!我对C还不太熟悉,任何帮助我都很感激!

最佳答案

card *newcard = malloc(sizeof(newcard));

只分配4字节-指针的大小
应该是:
card *newcard = malloc(sizeof(*newcard));

10-07 18:41