我是C语言的新手,并且遇到了很多问题,代码编译没有问题,但仍然收到以下消息:
Segmentation fault,当您尝试在UNIX终端上执行代码时。 这是代码:
///MAIN FUNCTION///
int main() {
printf("==========================J.U.S.T=======================$
printf("Enter your option number:\n1- working with an existing f$
char choice[1];
scanf("%c",choice);
if(choice[0] == '1'){
printf("first choice");
}
else if(choice[0] =='2' ){
printf("Enter the following data one by one:");
char BookT[50],AUTHORn[50];long int ISBN;
printf("Book Title:");
scanf("%s",BookT);
// sleep(5);
printf("Author name:");
scanf("%s",AUTHORn);
// sleep(5);
printf("Book number:");
scanf("%d",ISBN);
// sleep(5);
printf("%s\n%s\n%d\n",BookT,AUTHORn,ISBN);
}
else printf("Wrong choice try again!!");
return 0;
}
我正在使用Kali linux来编译代码。
答案 0 :(得分:2)
您可能已经注意到,分段错误发生在该行
CREATE OR REPLACE FUNCTION create_table1_history()
RETURNS TRIGGER AS
$table1_history$
BEGIN
INSERT INTO history_table
values (NEW.field1, OLD.field2);
RETURN OLD;
END;
$table1_history$ LANGUAGE plpgsql;
scanf("%d",ISBN);
需要一个指针来保存结果,但是您正在向其传递变量ISBN的值。为了将结果保存在ISBN变量中,您应该向其发送指向该变量的指针:scanf
(数组已经(或多或少)与指针一样工作,因此在读取字符串时无需使用scanf("%d", &ISBN);
)
答案 1 :(得分:1)
您应该在scanf
scanf("%ld",&ISBN);
答案 2 :(得分:1)
只需将scanf("%d", ISBN);
行更改为scanf("%d", &ISBN);
,扫描就需要一个指针,并且您试图保存不带指针的结果,因此该程序只会出现段错误。但是,如果您给他变量的地址,他就可以到达变量并将结果保存在其中。