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 打印- 它应该在那里.)提前谢谢你:)
编译器可能会向您显示如下警告:
‘%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因为您正在引用和取消引用相同的指针; 两者都会取消.