The C language does not provide a standard function that removes trailing spaces from a string. It is easy, however, to build your own function to do just this. The following program uses a custom function named rtrim() to remove the trailing spaces from a string. It carries out this action by iterating through the string backward, starting at the character before the terminating null character (\0) and ending when it finds the first nonspace character. When the program finds a nonspace character, it sets the next character in the string to the terminating null character (\0), thereby effectively eliminating all the trailing blanks. Here is how this task is performed:
#include <stdio.h>
#include <string.h>
void main(void);
char* rtrim(char*);
void main(void)
{
char* trail_str = "This string has trailing spaces in it. ";
/* Show the status of the string before calling the rtrim()
function. */
printf("Before calling rtrim(), trail_str is '%s'\n", trail_str);
printf("and has a length of %d.\n", strlen(trail_str));
/* Call the rtrim() function to remove the trailing blanks. */
rtrim(trail_str);
/* Show the status of the string
after calling the rtrim() function. */
printf("After calling rtrim(), trail_str is '%s'\n", trail_str);
printf("and has a length of %d.\n", strlen(trail_str));
}
/* The rtrim() function removes trailing spaces from a string. */
char* rtrim(char* str)
{
int n = strlen(str) - 1; /* Start at the character BEFORE
the null character (\0). */
while (n>0) /* Make sure we don't go out of bounds... */
{
if (*(str+n) != ' ') /* If we find a nonspace character: */
{
*(str+n+1) = '\0'; /* Put the null character at one
character past our current
position. */
break; /* Break out of the loop. */
}
else /* Otherwise, keep moving backward in the string. */
n--;
}
return str; /* Return a pointer to the string. */
}
Notice that the rtrim() function works because in C, strings are terminated by the null character. With the insertion of a null character after the last nonspace character, the string is considered terminated at that point, and all characters beyond the null character are ignored.