问题
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?
回答1:
try
fgets(buffer, 100, stdin);
size_t ln = strlen(buffer)-1;
if (buffer[ln] == '\n')
buffer[ln] = '\0';
回答2:
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
来源:https://stackoverflow.com/questions/27491005/how-can-i-get-a-string-from-input-without-including-a-newline-using-fgets