moksha_ 2019-07-11 15:56 采纳率: 0%
浏览 381

code blocks调试中出现 program ceceived signal SIGSEGV,Segmentation

我做了一个管理系统涉及信息保存以及查询 查询功能未运行调试时显示
program ceceived signal SIGSEGV,Segmentation
保存文件是成功的不在这里贴出
编译没有报错
以下是我的此次和问题有关的代码

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>
struct N9 //结构体定义
{
    char number;
    char kind;char Name;char buydate;char fault;char faultdate;
    int price;
}s[SIZE],*p=s;

一些其他功能函数本次问题不涉及

int main() //主函数
{
    void gotoxy(int x,int y);
    void C1();//主菜单
    void addC1(struct N9 s[]); //主菜单中1添加设备信息
    void changeC1();//修改设备信息
    void find_1(struct N9 S[]);//按编号查询
//主菜单+菜单1

    C1();
    system("cls");//清屏
    //addC1(p);//已完成
    system("cls");
    find_1(p);
    //changeC1();//未完成
    Sleep(1000);
    return 0;
}

位置函数

void gotoxy(int x,int y) //位置函数
{
    COORD pos;
    pos.X=x;
    pos.Y=y;
    SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),pos);
}

查询功能函数

void find_1(struct N9 S[])//按编号查询
{
    system("cls");
    gotoxy(4,6);
    void load();//从文件中读入N9数据 并查询
    printf("\t\t\t|---------------------------------------------|\n");
    printf("\t\t\t|-设备查询-                                   |\n");
    printf("\t\t\t|---------------------------------------------|\n");
    printf("\t\t\t|请输入设备编号:                             |\n");
    load();
}
void load()//读取文件并查询
{
    int i;
    char H1;
    FILE * fp;
    if((fp=fopen("N9.dat","rb"))==NULL)
    {
        printf("cannot open file111\n");
        return;
    }
    for(i=0;i<5;i++)
    {
        if(fread(&s[i],sizeof(struct N9),1,fp)!=1);//从fp指向的文件读入数据
        {   if(feof(fp))//如果读取失败进行提示
            {fclose(fp);
            printf("file read error !\n");
            return;
            }
            //查询功能
            gotoxy(42,9);
            getchar();
            scanf("%c",&H1);
            for(i=0;i<5;i++)
            {
                if(strcmp(H1,s[i].number)==0)
                {
                    printf("\n\t\t\t|查询到编号为%s的设备:\n",s[i].number);
                    printf("\t\t\t|设备编号:%s;设备种类:%s;设备名称:%s;设备价格:%d;购入日期:%s",s[i].number,s[i].kind,s[i].Name,s[i].price,s[i].buydate);
                    return;
                }
                break;
            }
            printf("\t\t\t|未找到相关设备信息!                         |\n");
            printf("\n\n\n");
            printf("\t\t\t|---------------------------------------------|\n");
            fclose(fp);
            //

                }
    }
}

  • 写回答

1条回答 默认 最新

  • 枫舞的季节 2019-07-11 16:57
    关注

    有两个问题:
    1 if(strcmp(H1,s[i].number)==0) 这一行 , strcmp 接收的是字符串比较,你进行的是字符比较,字符比较直接 用 if (H1 == s[i].number) 就可以
    2 printf 的时候 %s 对应的是字符串,而要想输出字符 用 %c ,如果%s 对应的不是字符串,会崩溃

    评论

报告相同问题?

悬赏问题

  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥15 c++头文件不能识别CDialog
  • ¥15 Excel发现不可读取的内容
  • ¥15 关于#stm32#的问题:CANOpen的PDO同步传输问题