第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用scanf的分割錯誤

使用scanf的分割錯誤

C
Qyouu 2019-11-20 12:38:47
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 *namechar name[20]。(請注意,這會將您的輸入限制為19個字符;如有必要,請使用更大的緩沖區(qū)。)

現(xiàn)在,您正在傳遞未初始化的指針scanf(),這實際上意味著scanf()將要寫入未定義的內存區(qū)域。它可能會在一個執(zhí)行中起作用,然后在下一個執(zhí)行中失敗。它可能會破壞進程地址空間中其他位置的內存。

不要使用未初始化的變量,而應考慮將編譯器警告盡可能地提高。編譯器會捕獲到這樣的錯誤并發(fā)出警告。


查看完整回答
反對 回復 2019-11-20
?
慕尼黑8549860

TA貢獻1818條經(jīng)驗 獲得超11個贊

代替使用* name,* password,..使用name [100],password [100],...。如果要讓name,password,..成為指針,則在調用scanf之前使用malloc或calloc分配內存。


查看完整回答
反對 回復 2019-11-20
  • 2 回答
  • 0 關注
  • 521 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號