Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

print text via pointer

Tags:

c

pointers

i am learning now c and i come up with this example, where i can print a text using pointers.

#include <stdio.h>

main ()
{ 
    char *quotes = "One good thing about music, when it hits you, you feel no pain. \"Bob Marley\"\n";
    printf(quotes);     
}

I get a warning from the compiler "format not a string literal and no format arguments" and when I execute the program it runs successfully.

I read some other questions here that they had the same warning from the compiler but I didn't find an answer that fits me. I understood the reason why i get this message:

This warning is gcc's way of telling you that it cannot verify the format string argument to the printf style function (printf, fprintf... etc). This warning is generated when the compiler can't manually peek into the string and ensure that everything will go as you intend during runtime...

Case 3. Now this is somewhat your case. You are taking a string generated at runtime and trying to print it. The warning you are getting is the compiler warning you that there could be a format specifier in the string. Say for eg "bad%sdata". In this case, the runtime will try to access a non-existent argument to match the %s. Even worse, this could be a user trying to exploit your program (causing it to read data that is not safe to read). (See the answer)

but what i have to add in my case to in order to have not warnings from the compiler?

like image 610
yaylitzis Avatar asked Jan 12 '23 02:01

yaylitzis


2 Answers

Change it to printf("%s", quotes); which adds the specifier that quotes is a 'string', or array of char.

like image 67
Leigh Avatar answered Jan 22 '23 20:01

Leigh


You need to tell printf what is it that you are printing. %s descriptor will tell printf that you are printing a string.

Format of printf = ("descriptor of what type of data you are printing",variable holding the data);

descriptor for strings is %s, for characters %c, for int %d

Change printf to:

printf("%s",quotes);
like image 41
sukhvir Avatar answered Jan 22 '23 19:01

sukhvir