XCode说C语言可能有些不安全吗?究竟是什么意思?

时间:2013-03-08 14:18:28

标签: c xcode

说我们在C工作。

如果我继续这样做:

char *word;
word = "Hello friends";
printf(word);

然后XCode告诉我,因为我没有使用字符串文字,所以我可能会有一些可能不安全的东西。这是否意味着要破解我的计划?如果是这样,那怎么可能发生?

或者,如果我这样做:

char *word;
word = "Hello friends";
printf("%s", word);

然后XCode没有标记,我很好。究竟有什么区别?

2 个答案:

答案 0 :(得分:4)

printf的第一个参数不是您要打印的字符串。这是一个格式字符串。它可以包含格式化指令,这些指令会导致在与其他参数组合后打印的字符串。

您的第一个示例是an uncontrolled format string vulnerability

答案 1 :(得分:2)

问题在于,在第一种情况下,如果word包含格式规范(%d%f%s等),那么printf()将会假设这些值在堆栈中,但事实上它们不是,这可能导致崩溃。

如果您不关心格式化,请使用puts()fputs()