分段错误 - 我如何弄清楚我的代码有什么问题?- C

0 c pointers segmentation-fault

我对编程非常陌生,正在尝试制定一个程序.但是,我没有得到任何有用的错误.该程序编译,但我在执行中途收到"分段错误"消息.在这个程序中,我要求输入一个月和一天,然后调用一个函数(我的计划是传递日期字符串,以及tempmonth数组的地址和tempday整数),将日期分为月份和一天,并将它们存储在地址中.然后在main中打印数据.我已经花了好几个小时来弄清楚我用指针和地址做错了什么......但我无法理解它.这是整个代码:

#include <stdio.h>
void separate(char*,char*,int*);

int main()

{    

        char date[12];
        printf("Enter a month and a day: ");
        fgets(date,12,stdin);

        char tempmonth[10];
        int tempday;
        separate(date,&*tempmonth,&tempday);

        printf("month is %s and day is %d",tempmonth,tempday);

        return 0;
}

void separate(char*date,char*tempmonth, int*tempday)

{

        sscanf(date,"%s %d",*tempmonth,*tempday);
}
Run Code Online (Sandbox Code Playgroud)

(由于某种原因,*不会按照char 日期和char tempmonth 打印- 它应该在那里.)提前谢谢你:)

Raj*_*ngh 7

编译器可能会向您显示如下警告:

‘%s’期望类型的‘char*’参数,但参数3有类型 ‘int’

‘%d’期望类型的‘int*’参数,但参数4有类型 ‘int’


由于sscanf需要一个指针作为,你必须通过一个参数一个int,这就是为什么它的创建Segmentation fault (core dumped).您正在访问程序可能无法访问的地址*tempmonth(存储在tempmonth其中的值).无法访问意味着该地址不属于操作系统提供给您的程序的内存,或者该进程没有访问它所需的权限.

改变线

sscanf(date,"%s %d",*tempmonth,*tempday);
Run Code Online (Sandbox Code Playgroud)

至

sscanf(date,"%s %d",tempmonth,tempday);
Run Code Online (Sandbox Code Playgroud)

作为tempmonth并且tempday已经是指针.

在调用separate(date,&*tempmonth,&tempday);写入时&*tempmonth也是等价的, tempmonth因为您正在引用和取消引用相同的指针; 两者都会取消.