Hello, I am new to this community, as well as to coding in general. I am having fun learning C, and I’ve generally been able to work through/slam my head into problems until they make sense, but I am confounded by this discrepancy, and I am hoping to have some help with it:

printf("%%c);

Output: %c


#include 

void textGreen(const char* text)
{
    printf("\033[32m%s\033[0m", text);
}

int main()
{
    textGreen("%%c\n");
    return 0;
}

Output: %%c.

Since printf is wrapped into the function, should the text not be outputting with the same behavior? Why is my terminal printing this code without escaping the percent sign? FWIW, the text is green, at the very least.

I am using Ubuntu 23.10, the code was written in KATE, it was compiled in GCC, and it was run on the basic GNOME terminal.

  • CameronDev@programming.dev
    link
    fedilink
    arrow-up
    6
    ·
    11 months ago

    Printf does the %% escaping, but it only does it for the format string (the first argument). %% signals to printf that you want a % instead of a formatting placeholder.