Reputation: 926
Please consider the following program code
#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;
}
I am compiling this program in Windows 10 x64 cmd via gcc -o cmmd cmmd.c
and then running via cmmd
The program seems to terminate unexpectedly without printing the output.
However, if I remove at least one of the variables except exitCommand
, or don't initialize the variables except for exitCommand
, the program behaves properly.
I am confused as to what is causing this problem. Stack memory shouldn't be a problem since all this occupies less than 1000000B.
I suspect fgets()
could be causing this, but there are no run-time errors that I am able to refer to. Should I perhaps have allocated explicit space for cmd
char array? The compiler being used is TDM-GCC. Kindly explain the phenomenon.
Upvotes: 1
Views: 62
Reputation: 1050
char* cmd
is uninitialized. To be able to store the input, you have to make cmd
point to the adress of a valid array :
char cmd[100];
fgets(cmd, 100, stdin);
// here you can use cmd as a null terminated string
Also you should check for fgets
return value to detect any error.
Upvotes: 1