C:尝试在屏幕上打印数据后出现分段错误

时间:2018-10-03 12:34:50

标签: c shell unix

我是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来编译代码。

3 个答案:

答案 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);,扫描就需要一个指针,并且您试图保存不带指针的结果,因此该程序只会出现段错误。但是,如果您给他变量的地址,他就可以到达变量并将结果保存在其中。