为了账号安全,请及时绑定邮箱和手机立即绑定

使用scanf的分割错误

使用scanf的分割错误

C
三国纷争 2019-10-22 21:16:51
noob在这里的问题:我正在尝试编写一个简单的菜单界面,但是我一直遇到分段错误错误,我不知道为什么。#include <stdlib.h>#include <stdio.h>int flush(); int add(char *name, char *password, char *type); int delete(char *name);int edit(char *name, char *password, char *type, char *newName, char *newPassword, char            *newType);int verify(char *name, char *password);int menu(){    int input;    char *name, *password, *type, *newName, *newPassword, *newType;    printf("MAIN MENU \n ============\n");    printf("1. ADD\n");    printf("2. DELETE\n");    printf("3. EDIT\n");    printf("4. VERIFY\n");    printf("5. Exit\n");    printf("Selection:");    scanf("%d", &input);    flush();    switch (input){    case 1:        printf("%s\n", "Enter Name:");        scanf("%s", name);        flush();        printf("%s\n", "enter password" );        scanf("%s", password);        flush();        printf("%s\n","enter type" );        scanf("%s",type);        add(name, password, type);        menu();        break;    case 2:        printf("Enter Name:" );        scanf("%s",name);        flush();        delete(name);        menu();        break;    case 3:        printf("Enter Name:\n");        scanf("%s",name);        flush();        printf("Enter Password\n");        scanf("%s", password);        flush();                    printf("enter type:\n");        scanf("%s", type);        flush();        printf("enter your new username:\n");        scanf("%s",newName);        flush();        printf("enter your new password\n");        scanf("%s", newPassword);        flush();        printf("enter your new type\n");        scanf("%s",newType);        flush();        edit(name, password, type, newName, newPassword, newType);        menu();        break;    case 4:        printf("Enter Name\n");        scanf("%s",name);        flush();        printf("Enter Password\n");        scanf("%s",password);        flush();        verify(name, password);        menu();        break;    case 5:        return 0; 在任何菜单选项中输入两个字段后,出现分段错误
查看完整描述

2 回答

?
慕侠2389804

TA贡献1719条经验 获得超6个赞

您需要初始化指针。或者,使用堆栈分配的数组。

例如,代替char *namechar name[20]。(请注意,这会将您的输入限制为19个字符;如有必要,请使用更大的缓冲区。)

现在,您正在传递未初始化的指针scanf(),这实际上意味着scanf()将要写入未定义的内存区域。它可能会在一个执行中起作用,然后在下一个执行中失败。它可能会破坏进程地址空间中其他位置的内存。

不要使用未初始化的变量,而应考虑将编译器警告尽可能地提高。编译器会捕获到这样的错误并发出警告。


查看完整回答
反对 回复 2019-10-22
?
偶然的你

TA贡献1841条经验 获得超3个赞

代替使用* name,* password,..使用name [100],password [100],...。如果要让name,password,..成为指针,则在调用scanf之前使用malloc或calloc分配内存。


查看完整回答
反对 回复 2019-10-22
  • 2 回答
  • 0 关注
  • 492 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信