【发布时间】:2020-05-29 01:01:09
【问题描述】:
我创建了Date struct 来存储日期格式为date、month、year,由用户输入为由空格分隔的单行字符串。
我想拆分输入并相应地存储它。我使用了简单的 C sscanf() 将我的输入拆分并存储在 struct Date 中。但是当我尝试打印我的数据时,它显示了一些垃圾值,我不知道缺少什么。
帮我解决这个问题。
我的代码:
Input: 24 Jan 1980
output: 24 ? -978635323
这是我的 C 代码。
struct Date
{
int date;
char* month;
int year;
};
int main()
{
struct Date date[1];
char* string;
scanf("%s",string);
sscanf(string,"%d %s %d",&date[0].date,date[0].month,&date[0].year);
printf("%d %s %d",date[0].date,date[0].month,date[0].year);
return 0;
}
提前致谢。
【问题讨论】:
-
需要为字符串分配内存。例如
char *string = malloc(MY_MAX_LEN);目前您的代码没有设置string,因此它是一个垃圾/无效指针,使用scanf写入它会导致未定义的行为。 -
string被声明为一个指针。指针是一个变量,用于存储某些内存的地址。因此,您需要一些内存(例如malloc提供的内存),并且您需要将string设置为该内存地址。 -
strdup() 呢?
-
strdup需要从中复制原始字符串。您没有原始字符串。您正在阅读来自STDIN的内容。 -
除了为字符串分配内存(而不是指针),考虑使用
fgets而不是scanf