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;在任何菜单选项中输入两个字段后,出现分段错误
2 回答
蛊毒传说
TA贡献1895条经验 获得超3个赞
您需要初始化指针。或者,使用堆栈分配的数组。
例如,代替char *name
做char name[20]
。(请注意,这会将您的输入限制为19个字符;如有必要,请使用更大的缓冲区。)
现在,您正在传递未初始化的指针scanf()
,这实际上意味着scanf()
将要写入未定义的内存区域。它可能会在一个执行中起作用,然后在下一个执行中失败。它可能会破坏进程地址空间中其他位置的内存。
不要使用未初始化的变量,而应考虑将编译器警告尽可能地提高。编译器会捕获到这样的错误并发出警告。
慕尼黑8549860
TA贡献1818条经验 获得超11个赞
代替使用* name,* password,..使用name [100],password [100],...。如果要让name,password,..成为指针,则在调用scanf之前使用malloc或calloc分配内存。
- 2 回答
- 0 关注
- 483 浏览
添加回答
举报
0/150
提交
取消