Coding in C, I'm having an issue with user input. Sometimes, the input works and sometimes it doesn't.
Example run output from terminal:
dennis@MBP2021 Encryption % make
cc Gronsfeld_Cipher.c /Users/dennis/Documents/C/programs/DJSlibrary/cs50.c -o cipher
dennis@MBP2021 Encryption % ./cipher
Please enter line to be encoded: This, however, is not the time.
You entered: This, however, is not the time. Length: 31
The message is: This, however, is not the time.
The cipher is: EZNH, SCVKOHZ, KF UFP GXF ONWX.
The decipher is: THIS, HOWEVER, IS NOT THE TIME.
dennis@MBP2021 Encryption % ./cipher
Please enter line to be encoded: This, however, is not the time, nor the place to have fun.
You entered: This, however, is not the time, nor the place to have fun. Length: 58
zsh: trace trap ./cipher
dennis@MBP2021 Encryption %
code snippet:
char data[] = "Dummy";
int keys[] = {11, 7, 13, 10, 25, 9, 8, 3};
// Do the stuff
int main(void)
{
// Get input from user
char *string_input = NULL;
size_t string_size = 250;
ssize_t bytes_read;
printf("\nPlease enter line to be encoded: ");
string_input = (char *) malloc(string_size);
bytes_read = getline(&string_input, &string_size, stdin);
if(bytes_read < 2)
{
printf("\n\nNo input was entered. Program terminating.\n");
printf("Error Code: 1\n\n");
free(string_input);
return 1;
}
string_input[bytes_read-1] = 0; // Clear out the new line.
printf("\nYou entered: %s Length: %ld\n", string_input, bytes_read-1);
strcpy(data, string_input);
free(string_input);
// Get sizes
int DataLen = strlen(data);
int ks = sizeof(keys) / sizeof(keys[0]);
printf("\nThe message is: %s", data);
According to what I see on the terminal, it dies at the strcpy (I guess) The line string_input[bytes_read-1] = 0; // Clear out the new line is trying to remove the line feed at the end of the string input. It never gets to the last printf. I don't understand why it worked with a small line (31 bytes) and not the 58 byte line. I tried to use debug in vscode, but it doesn't allow me to enter an input line. Something else I need to find out. Also, I'm new to C programming. Thanks in advance.
The problem is very likely this statement:
Here you copy data into an array that can only hold six characters, null-terminator included.
When you create and initialize the
dataarray you only make space for the string"Dummy", nothing more.If the input it longer than five characters, then that means you will write out of bounds of
data, and have undefined behavior.Set a specific size for the
dataarray, one that is big enough to hold the largest input.Or keep on using
string_input, and don't usedataat all.