gpt4 book ai didi

c - 在字符串中添加一个字符并打印它会在 C 中打印乱码

转载 作者:太空宇宙 更新时间:2023-11-04 06:30:43 25 4
gpt4 key购买 nike

所以我有这个功能:

void function (linked_list first, char character){
linked_list new = NULL;
new = (linked_list) malloc(sizeof(linked_list));
new->name[0] = character;
puts (new->character);
...

我的问题是这 puts 打印出我的字符后跟一些垃圾,例如如果 character = t,puts 将打印 tőú 或类似的东西。

所以我的问题是,如何将一个字符放在字符串的末尾,而不至于弄乱一切?哦,name 在结构中定义为 char name[256];

最佳答案

C 中的一个字符串需要终止。所以你想做

new->name[0] = character;
new->name[1] = '\0';

否则你会看到内存中的所有“乱码”(malloc 不会清除内存,所以它指向“那里的任何东西”)。

也不是@self 提出的极好的观点——您没有为结构分配足够的内存,而只是为指向结构的指针分配内存。在现代 C 中(实际上是 C89 之后的任何东西),您不会强制转换 malloc 的结果——那是“旧 K&R”(我知道,因为这是我学到的……)。这些天你应该写

new = malloc(sizeof(*new));

通过使用 sizeof(*new) 您可以保证大小是正确的,即使您将来改变了对 new 类型的想法...这是执行此操作的最简洁方法(并向在评论中指出这一点的@WhozCraig 致敬)。

关于c - 在字符串中添加一个字符并打印它会在 C 中打印乱码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20912194/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com