gpt4 book ai didi

c - 用gets()读char*报 "Core Dumped"错误(C语言)

转载 作者:太空宇宙 更新时间:2023-11-04 06:48:06 33 4
gpt4 key购买 nike

我正在尝试使用非固定字符数组读取用户输入,但当我在键盘上输入内容时它只是软崩溃(没有崩溃窗口)。当我在在线 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;
}

最佳答案

这里

char* userInput;

userInput没有任何有效内存,因此您可以将一些数据放入其中,例如

gets(userInput); /* this causes seg.fault because till now userInput doesn't have any valid memory */

所以要克服这个问题要么使用像这样的字符数组

char userInput[100] = {0};

或者创建动态数组,然后将数据扫描到动态分配的内存中。

也不要使用 gets() , 使用 fgets()相反,如 here 中所述

例如

char* userInput = malloc(SOME_SIZE); /* define SOME_SIZE, creating dynamic array equal to SOME_SIZE  */
fgets(userInput ,SOME_SIZE, stdin) ; /* scan the data from user & store into dynamically created buffer */

旁注,来自 fgets 的手册页

If a newline is read, it is stored into the buffer. A terminating null byte (aq\0aq) is stored after the last character in the buffer.

因此通过调用 strcspn() 删除尾随的换行符.例如

userInput[strcspn(userInput, "\n")] = 0; 

还有一次使用动态数组userInput完成后,不要忘记通过调用 free() 释放动态分配的内存以避免内存泄漏。例如

free(userInput);

关于c - 用gets()读char*报 "Core Dumped"错误(C语言),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55286223/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com