Function to remove spaces from string/char array in C
arrays, c, string
Solution
After removing the white spaces from the `input` you have not terminated it with nul-terminator (`\0`) because the new length is less than or equal to the original string.
Just nul-terminate it at the of end your for loop:
char* deblank(char* input)
{
int i,j;
char *output=input;
for (i = 0, j = 0; i<strlen(input); i++,j++)
{
if (input[i]!=' ')
output[j]=input[i];
else
j--;
}
output[j]=0;
return output;
}
Problem
The question asked here is very similar to what I am having a problem with. The difference is that I must pass an argument to a function that removes the spaces and returns the resulting string/char array. I got the code working to remove the spaces but for some reason I am left with trailing characters left over from the original array. I even tried strncpy but I was having lots of errors. Here is what I have so far: ``` #include <stdio.h> #include <string.h> #define STRINGMAX 1000 /*Maximium input size is 1000 characters*/ char* deblank(char* input) /* deblank accepts a char[] argument and returns a char[] */ { char *output=input; for (int i = 0, j = 0; i<strlen(input); i++,j++) /* Evaluate each character in the input */ { if (input[i]!=' ') /* If the character is not a space */ output[j]=input[i]; /* Copy that character to the output char[] */ else j--; /* If it is a space then do not increment the output index (j), the next non-space will be entered at the current index */ } return output; /* Return output char[]. Should have no spaces*/ } int main(void) { char input[STRINGMAX]; char terminate[] = "END\n"; /* Sentinal value to exit program */ printf("STRING DE-BLANKER\n"); printf("Please enter a string up to 1000 characters.\n> "); fgets(input, STRINGMAX, stdin); /* Read up to 1000 characters from stdin */ while (strcmp(input, terminate) != 0) /* Check for que to exit! */ { input[strlen(input) - 1] = '\0'; printf("You typed: \"%s\"\n",input); /* Prints the original input */ printf("Your new string is: %s\n", deblank(input)); /* Prints the output from deblank(input) should have no spaces... DE-BLANKED!!! */ printf("Please enter a string up to 1000 characters.\n> "); fgets(input, STRINGMAX, stdin); /* Read up to another 1000 characters from stdin... will continue until 'END' is entered*/ } } ```