gpt4 book ai didi

c - Program.exe 已停止工作错误 : fgets function

转载 作者:行者123 更新时间:2023-11-30 15:17:39 27 4
gpt4 key购买 nike

我下面用 C 编写的程序正在运行到某个点。然而,它停在我认为无错误代码的中间。我来自 Java,是 C 新手,因此我们将不胜感激。

#include <stdio.h>
#include <stdlib.h>

void getInput(char *input, const char *rs[]){// Args are the user input and our reserved words array.

printf(">>"); fgets(input, 1000, stdin);// Getting our normal command

int i;
for(i = 0; i < (int)sizeof(rs); i++){

if(strcmp(input, rs[i]) != 0){
printf("You said: %s", input); //PROGRAM BREAKS AFTER THIS LINE
}

}

printf("Size of \"input\" is: %d\n", sizeof(input));// Just checking the size of input

free(input);// Deallocating input since we won't need it anymore.

}

int main(){

char *input = malloc(500 * sizeof(char));// Command line input
const char *rs[1];// Reserved words array.

rs[0] = "print";

getInput(input, rs);

getch();

}

最佳答案

一些问题,主要源于将 C 视为像 Java 一样具有字符串和数组。它没有,它只是有字节 block 和一些函数来用它们做类似字符串和类似数组的事情。

首先,malloc(500 * sizeof(char)) 分配 500 个字节(根据定义,sizeof char 为 1)。稍后您对这 500 个字节进行 fgets(input, 1000...) 。不好。

char *rs[1] 分配一个包含 1 个字符指针的数组。它不会为任何字符串分配任何内存。 rs[0] = "print" 可以,因为“print”分配 6 个字节,并且赋值使 rs[0] 指向它们。但是,然后您将 rs 传递给函数 getInput 并对其调用 sizeof,这会给出单个指针的大小(可能是 4 或 8 个字节),因为 C 没有保持数组维度——它只是传递一个指向数组开头的指针。您需要自己传递长度。

您没有检查fgets()的返回值。即使您没有将 1000 字节读入 500 字节的缓冲区并且 fgets 工作正常,您的 strcmp() 也将始终失败,因为 fgets() 包含换行符在字符串中。

最后,sizeof(input) 是另一个指针大小,而不是数组维度。您可能是指 strlen(input)

关于c - Program.exe 已停止工作错误 : fgets function,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32215270/

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