6

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.

top 5 comments
sorted by: hot top controversial new old
[-] CameronDev@programming.dev 6 points 6 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.

[-] smpl@discuss.tchncs.de 3 points 6 months ago

printf simply insert the string from the text argument without parsing it. printf only parse its first argument to see where, and with what formatting, the values of variables should be printed and is not parsing the variables for formatting. Hope it helps and have fun learning C.

[-] bizdelnick@lemmy.ml 2 points 6 months ago

In the first example you have %%c in the format string where %% is replaced with %. In the second you have ℅s in the format string that is replased with literal text %%c from the next argument.

[-] Classy@sh.itjust.works 1 points 6 months ago

Thank you so much! I didn't realize that %s changed the runtime rules for escape characters. Is there somewhere that I can find a list of these rules? Because things like \n still work like normal, but then %% does not.

[-] bizdelnick@lemmy.ml 1 points 6 months ago

Nothing has changed. %-sequences only work in format string (first argument of printf, it is a feature of printf family of functions). Backslash escaped sequences work everywhere (it is a feature of C language itself).

this post was submitted on 07 Feb 2024
6 points (87.5% liked)

Code Review

155 readers
1 users here now

Welcome to the programming.dev code review community! This is a place where you can review other people's code or request reviews on your own

Before posting please read the sections below (click on one to expand it)

What is a code review?

What is a code review?

A code review is a process where people who did not write a piece of code look over it to find errors, suggest improvements, and make sure it follows coding standards

When doing a code review look for these aspects:

  1. Correctness: Does the code behave as expected and meet the requirements?
  2. Readability: Is the code easy to understand and maintain?
  3. Efficiency: Are there more efficient ways to accomplish the same task?
  4. Best Practices: Does the code follow established coding standards and best practices?
  5. Security: Are there potential security vulnerabilities?
  6. Scalability: Will the code perform well as the application scales?

Post Guidelines

Guidelines

  • Put the programming language you used for your code in square brackets ahead of your post title. e.g. [Python], [React], [C#], etc.
  • Provide a link to a spot where people can view your code (e.g. github, etc.) in your post body
  • In your post title put a small description of what the thing is that you want reviewed and then you can expand on that in more details if you want in your post body

Rules

Rules

Any code review requests you post after your first must be done after you have reviewed two other people's code (and then you need another two for each request after that as well).

Youre free to post your first code review request in this community though without needing to follow this


Credits

Credits

Icon base by Lorc under CC BY 3.0 with modifications to add a gradient




Wormhole

!react@programming.dev

founded 8 months ago
MODERATORS