I am perplexed that the following code is not behaving as expected.
The code behaves differently depending on how the string is initially defined (i.e. char str[] = "1,000" vs char *str = "1,000").
Here is the code:
#include <stdio.h>
char* removeCommasInString (char *str);
int main()
{
    char str[] = "1,000,000";
    char str2[] = "10,000";
    char* str3 = "1,000";
    
    printf("str is %s\n", str);
    printf("str is %s\n\n", removeCommasInString(str));
    
    printf("str2 is %s\n", str2);
    printf("str2 is %s\n\n", removeCommasInString(str2));
    
    printf("str3 is %s\n", str3);
    printf("str3 is %s\n", removeCommasInString(str3));
   
    puts("Program has ended");
    return 0;
}
char* removeCommasInString (char *str)
{
    const char *r = str;    // r is the read pointer
    char *w = str;          // w is the write pointer
                                                
    do {
        if (*r != ',')   
                         
        {
            *w++ = *r;   // Set *w (a single character in the string) to *r
        }
    } while (*r++);      // At end of the string, *r++ will be '\0' or 0 or false
                         // Then loop will end
                         // The str string will now have all the commas removed!!
                         // The str pointer still points to the beginning of the
                         // string.
                             
    return str;
}
Here is the output I get:
str is 1,000,000
str is 1000000
str2 is 10,000
str2 is 10000
str3 is 1,000
...Program finished with exit code 0
Press ENTER to exit console.
The commas are not removed in str3. And the main() function never reaches the "puts" statement. And I never see an error message.
I am sure it is something simple that I am missing.
 
    