fgets() 和初始化变量的奇怪程序行为
Odd program behavior with fgets() and initialized variables
请考虑以下程序代码
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main(void)
{
char *cmd;
int exitCommand = 1;
int validCommands = 0;
int commandValid = 0;
while(exitCommand != 0)
{
printf("> ");
fgets(cmd, 101, stdin);
if(*cmd != '\n')
{
printf("%s\n", cmd);
}
exitCommand = strncmp("exit", cmd, 4);
}
return 0;
}
我正在通过 gcc -o cmmd cmmd.c
在 Windows 10 x64 cmd 中编译此程序,然后通过 cmmd
运行ning
该程序似乎在没有打印输出的情况下意外终止。
但是,如果我至少删除 exitCommand
以外的变量之一,或者不初始化 exitCommand
以外的变量,程序将正常运行。
我对导致此问题的原因感到困惑。堆栈内存应该不是问题,因为所有这些占用不到 1000000B。
我怀疑 fgets()
可能是导致此问题的原因,但我无法参考 运行 时间错误。我是否应该为 cmd
字符数组显式分配 space?使用的编译器是 TDM-GCC。请解释一下这个现象。
char* cmd
未初始化。为了能够存储输入,您必须使 cmd
指向有效数组的地址:
char cmd[100];
fgets(cmd, 100, stdin);
// here you can use cmd as a null terminated string
您还应该检查 fgets
return 值以检测任何错误。
请考虑以下程序代码
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main(void)
{
char *cmd;
int exitCommand = 1;
int validCommands = 0;
int commandValid = 0;
while(exitCommand != 0)
{
printf("> ");
fgets(cmd, 101, stdin);
if(*cmd != '\n')
{
printf("%s\n", cmd);
}
exitCommand = strncmp("exit", cmd, 4);
}
return 0;
}
我正在通过 gcc -o cmmd cmmd.c
在 Windows 10 x64 cmd 中编译此程序,然后通过 cmmd
运行ning
该程序似乎在没有打印输出的情况下意外终止。
但是,如果我至少删除 exitCommand
以外的变量之一,或者不初始化 exitCommand
以外的变量,程序将正常运行。
我对导致此问题的原因感到困惑。堆栈内存应该不是问题,因为所有这些占用不到 1000000B。
我怀疑 fgets()
可能是导致此问题的原因,但我无法参考 运行 时间错误。我是否应该为 cmd
字符数组显式分配 space?使用的编译器是 TDM-GCC。请解释一下这个现象。
char* cmd
未初始化。为了能够存储输入,您必须使 cmd
指向有效数组的地址:
char cmd[100];
fgets(cmd, 100, stdin);
// here you can use cmd as a null terminated string
您还应该检查 fgets
return 值以检测任何错误。