莫名出现 Segmentation fault 问题
本帖最后由 落日飞花 于 2021-7-26 21:50 编辑出错语句
scanf("%[^\n]",(*book).title);
定义:
struct Book *book = NULL;
book = (struct Book *)malloc(sizeof(struct Book));
结构体定义
struct Book
{
char title;
char author;
struct Book * next;
}
完整代码
#include <stdio.h>
struct Book
{
char title;
char author;
struct Book * next;
};
void addBook(struct Book **lib);//添加新书
void getInput(struct Book *book);//从缓存区读入新书内容
void printlib(struct Book *);//打印图书
void printlib(struct Book* book)
{
printf("Book Name: %s\n",book->title);
printf("Book Author: %s\n",book->author);
}
void getInput(struct Book *book)
{
printf("Please enter a new Book!\n");
printf("Please enter book's name:");
scanf("%[^\n]",(*book).title);// 此处出现问题
//gets(book->title);
printf("Please enter the anthor:");
scanf("%[^\n]",book->author);
}
void addBook(struct Book **lib)
{
struct Book *book = NULL;
book = (struct Book *)malloc(sizeof(struct Book));//分配栈区内存
if (book = NULL)
{
printf("new book create error");
exit(1);
}
getInput(book);
book->next = *lib;
*lib = book;
}
int main(void)
{
struct Book *library = NULL;
addBook(&library);
printlib(library);
while(1);
return 0;
} 学习学习 改成scanf("%[^\n]",book->titler);试试 大马强 发表于 2021-7-27 06:39
改成scanf("%[^\n]",book->titler);试试
还是一样的 scanf("%s",book->titler); 万千只cnm 发表于 2021-7-27 13:22
scanf("%s",book->titler);
不是这个问题,结果跟*(book).title一样出问题 本帖最后由 落日飞花 于 2021-7-27 13:57 编辑
{:5_104:} 落日飞花 发表于 2021-7-27 13:53
struct Book *book = NULL;
book = (struct Book *)malloc(sizeof(struct Book));
你数组不能直接 =赋值啊
万千只cnm 发表于 2021-7-27 13:57
你数组不能直接 =赋值啊
确实。
不过为什么scanf也会读不进去呢 本帖最后由 桃花飞舞 于 2021-7-27 14:14 编辑
落日飞花 发表于 2021-7-27 13:59
确实。
不过为什么scanf也会读不进去呢
scanf一次只能读取单个数据字符或者数字,读字符串自然不行,getchar();可以读取字符串,还有scanf("%[^\n]",(*book).title);这句里面的%[&^\n]这是什么意思,没见过这种用法,虽然我也改不好,感觉还是有难度 桃花飞舞 发表于 2021-7-27 14:06
scanf一次只能读取单个数据字符或者数字,读字符串自然不行,getchar();可以读取字符串,还有scanf("%[ ...
scanf("%s",str);是可以读取字符串的
scanf("%[^\n]",str);表示读取一串以回车结尾的字符串,正常用%s是没法读取带空格的字符串的 if (book = NULL)
你这能不出错吗 淦,原来如此{:5_104:},经典==写成= 本帖最后由 桃花飞舞 于 2021-7-27 15:50 编辑
落日飞花 发表于 2021-7-27 15:32
淦,原来如此,经典==写成=
scanf("%[^\n]",(*book).title);// 此处出现问题
//gets(book->title);
getchar();//此处要加一句
printf("Please enter the anthor:");
scanf("%[^\n]",book->author); 桃花飞舞 发表于 2021-7-27 15:44
可是改完这个,author输入也是不行的啊
能输入了 落日飞花 发表于 2021-7-27 15:50
能输入了
有点链表的感觉,就是只有一个节点, 桃花飞舞 发表于 2021-7-27 15:56
有点链表的感觉,就是只有一个节点,
写到一半僵住了
页:
[1]