我对编程非常陌生,我正在尝试编制一个程序。但是,我没有得到任何有用的错误。程序会编译,但在执行的中途我会收到一条“分段错误”消息。在这个程序中,我要求输入一个月和一天,然后调用一个函数(我的计划是传递日期字符串,以及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);
因为
tempmonth
和tempday
已经是指针。同样,在调用
separate(date,&*tempmonth,&tempday);
时,写入&*tempmonth
等同于tempmonth
,因为您正在引用和取消引用同一指针;两者都将取消。关于c - 段错误-如何找出我的代码出了什么问题? - C,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36397395/