gpt4 book ai didi

c - 如何在C中的结构中打印字符串

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

当我尝试在结构中存储和打印字符串时,我的代码出现问题。

我在这里提取了代码的基本部分:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct post
{
char name[30];
int tel;
struct post *next;
};

typedef struct post Post;

Post *head = NULL;
Post *current;

Post* CreateList(char tempname[30], int temptel);

Post* CreateList(char tempname[30], int temptel)
{
Post *ptr = (Post*)malloc(sizeof(Post));

strcpy(ptr->name, tempname);
ptr->tel = temptel;
ptr->next = NULL;

printf("\n creating list with headnode as [%s]\n",tempname);

head = current = ptr;
return ptr;
}

int main()
{
char tempname[30];
int temptel;

Post * ptr;

printf("[Name] [Number] = ");
scanf("%s %d", &tempname[30], &temptel);
CreateList(tempname, temptel);
}

在 main 中,您应该插入一个名称和数字,在 CreateList 中,它创建链表的第一个节点。当我尝试打印带有名称的字符串时,会出现一些乱码,但数字打印正常。

我怀疑 tempname 并没有真正从 main 发送到 CreateList,即使我试图将它作为函数中的参数发送。我也尝试打印存储在结构中的名称:

    printf("\n creating list with headnode as [%s]\n",ptr->name);

但这也失败了。

所以当我尝试打印名称时出现问题,但因为我已经尝试了很多打印它的方法(使用 strcpy()、strncat()、strdup())我开始怀疑我实际上从未将字符串存储在 ptr->name 中。所以我要么打印错误,要么存储错误。

对于解决此问题的任何帮助或提示,我将不胜感激!提前致谢。

最佳答案

当你这样做时:

scanf("%s %d", &tempname[30], &temptel);

作为开始写入的地址,您正在传递字符串的last 元素之后的内存位置(字符串的最后一个元素是tempname[29]).这也意味着您将在分配的内存之外写入,从而导致危险行为。相反,您应该传递字符串的第一个字符的地址,即:

scanf("%s %d", &(tempname[0]), &temptel);

或者更简单地说:

scanf("%s %d", tempname, &temptel);

我还建议您将数组大小定义为常量,并将所有 30 替换为常量名称。

#define MY_STRING_SIZE 30

关于c - 如何在C中的结构中打印字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17478757/

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