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;在任何菜單選項中輸入兩個字段后,出現(xiàn)分段錯誤
2 回答

蠱毒傳說
TA貢獻1895條經(jīng)驗 獲得超3個贊
您需要初始化指針。或者,使用堆棧分配的數(shù)組。
例如,代替char *name
做char name[20]
。(請注意,這會將您的輸入限制為19個字符;如有必要,請使用更大的緩沖區(qū)。)
現(xiàn)在,您正在傳遞未初始化的指針scanf()
,這實際上意味著scanf()
將要寫入未定義的內存區(qū)域。它可能會在一個執(zhí)行中起作用,然后在下一個執(zhí)行中失敗。它可能會破壞進程地址空間中其他位置的內存。
不要使用未初始化的變量,而應考慮將編譯器警告盡可能地提高。編譯器會捕獲到這樣的錯誤并發(fā)出警告。

慕尼黑8549860
TA貢獻1818條經(jīng)驗 獲得超11個贊
代替使用* name,* password,..使用name [100],password [100],...。如果要讓name,password,..成為指針,則在調用scanf之前使用malloc或calloc分配內存。
- 2 回答
- 0 關注
- 521 瀏覽
添加回答
舉報
0/150
提交
取消