我对编程非常陌生,我正在尝试编制一个程序。但是,我没有得到任何有用的错误。程序会编译,但在执行的中途我会收到一条“分段错误”消息。在这个程序中,我要求输入一个月和一天,然后调用一个函数(我的计划是传递日期字符串,以及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);
}

(出于某种原因,*不会按chardate和chartempmonth打印-它应该在那里。)
提前谢谢:)

最佳答案

编译器可能会向您显示如下警告:
‘%s’需要类型为‘char*’的参数,但参数3具有类型
‘int’
‘%d’需要类型为‘int*’的参数,但参数4具有类型
‘int’
因为sscanf接受一个指针作为参数,在这里您传递了一个int,所以它创建了一个Segmentation fault (core dumped)。您正在访问一个地址*tempmonth(存储在tempmonth中的值),您的程序可能无法访问该地址。不可访问意味着地址不属于操作系统提供给程序的内存,或者进程没有访问它所需的权限。
换行

sscanf(date,"%s %d",*tempmonth,*tempday);


sscanf(date,"%s %d",tempmonth,tempday);

因为tempmonthtempday已经是指针。
同样,在调用separate(date,&*tempmonth,&tempday);时,写入&*tempmonth等同于tempmonth,因为您正在引用和取消引用同一指针;两者都将取消。

关于c - 段错误-如何找出我的代码出了什么问题? - C,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36397395/

10-11 21:22