说我们在C工作。
如果我继续这样做:
char *word;
word = "Hello friends";
printf(word);
然后XCode告诉我,因为我没有使用字符串文字,所以我可能会有一些可能不安全的东西。这是否意味着要破解我的计划?如果是这样,那怎么可能发生?
或者,如果我这样做:
char *word;
word = "Hello friends";
printf("%s", word);
然后XCode没有标记,我很好。究竟有什么区别?
答案 0 :(得分:4)
printf
的第一个参数不是您要打印的字符串。这是一个格式字符串。它可以包含格式化指令,这些指令会导致在与其他参数组合后打印的字符串。
答案 1 :(得分:2)
问题在于,在第一种情况下,如果word
包含格式规范(%d
,%f
,%s
等),那么printf()
将会假设这些值在堆栈中,但事实上它们不是,这可能导致崩溃。
如果您不关心格式化,请使用puts()
或fputs()
。