【发布时间】:2019-08-12 15:35:45
【问题描述】:
我正在尝试使用非固定字符数组读取用户输入,但当我在键盘上输入内容时,它只是 软崩溃(没有崩溃窗口)。当我在在线 C 编译器上运行它时,它会显示 Segmentation fault (core dumped)。
我的代码:
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <stdlib.h>
int validerNAS(char* userInput);
int main() {
int valid = 0;
char* userInput;
do {
printf("Enter 9 characters: ");
gets(userInput);
valid = validerNAS(userInput);
} while (!valid);
return 0;
}
int validerNAS(char* userInput) {
if ((strlen(userInput) != 9)) {
printf("Error! You must enter 9 characters\n\n");
return 0;
}
return 0;
}
【问题讨论】:
-
您希望输入存储在哪里?你还没有分配任何内存。除此之外 - 永远不要使用
gets,它不再是该语言的一部分并且已被弃用。 -
char* userInput;->char userInput[100];。阅读 C 教科书中处理字符串的章节。 -
而且
validerNAS有一个小而明显的bug,我让你自己去发现。 -
@Eugene Sh.我尝试使用 scanf("%s", userInput) 但它会出现同样的错误。
-
OT: about:
scanf("%s", userInput)1) 始终检查返回值(不是参数值)以确保操作成功。在这种情况下,除 1 之外的任何返回值都表示发生了错误。 2) 当使用输入格式说明符 '%s' 和/或 '%[...]' 时,总是包含一个比输入缓冲区长度小 1 的 MAX CHARACTERS 修饰符,因为这些说明符总是将 NUL 字节附加到输入。这也避免了缓冲区溢出的任何可能性以及由此产生的未定义行为
标签: c memory segmentation-fault core