This question already has an answer here:
-
Removing trailing newline character from fgets() input
12 answers
I'm trying to write an inputted string elsewhere and do not know how to do away with the new line that appears as part of this string that I acquire with stdin and fgets.
char buffer[100];
memset(buffer, 0, 100);
fgets(buffer, 100, stdin);
printf("buffer is: %s\n stop",buffer);
I tried to limit the amount of data that fgets gets as well as limiting how much of the data is written but the new line remains. How can I simply get the inputted string up to the last character written with nothing else?
try
fgets(buffer, 100, stdin);
size_t ln = strlen(buffer)-1;
if (buffer[ln] == '\n')
buffer[ln] = '\0';
Simply look for the potential '\n'
.
After calling fgets()
, If '\n'
exists, it will be the last char
in the string (just before the '\0'
).
size_t len = strlen(buffer);
if (len > 0 && buffer[len-1] == '\n') {
buffer[--len] = '\0';
}
Sample usage
char buffer[100];
// memset(buffer, 0, 100); not needed
if (fgets(buffer, sizeof buffer, stdin) == NULL) { // good to test fgets() result
Handle_EOForIOerror();
}
size_t len = strlen(buffer);
if (len > 0 && buffer[len-1] == '\n') {
buffer[--len] = '\0';
}
printf("buffer is: %s\n stop",buffer);
Notes:
buffer[strlen(buffer)-1]
is dangerous in rare occasions when the first char
in buffer
is a '\0'
(embedded null character).
scanf("%99[^\n]%*c", buffer);
is a problem if the first char
is '\n'
, nothing is read and '\n'
remains in stdin
.
strlen()
is fast as compared to other methods: https://codereview.stackexchange.com/a/67756/29485
Or roll your own code like gets_sz