【发布时间】:2014-12-13 19:49:29
【问题描述】:
为什么这段代码没有返回预期的连接字符串,而是一个 2?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
const char * meh() {
char meh1[32] = "This ";
char meh2[32] = "should work :)";
return strcat(meh1, meh2);
}
int main() {
printf(meh());
return 0;
}
【问题讨论】:
-
你在开玩笑吗:
printf(meh());?你在哪里读到的? -
不要将局部变量(
strcat()返回meh1)返回给调用代码。不要像那样使用printf():使用printf("%s\n", meh());。返回(指向)局部变量的变量是灾难的根源;你会得到未定义的行为,这意味着程序几乎可以做任何事情,无论发生什么都可以,因为编译器不需要对未定义的行为做任何明智的事情。 -
@Jonathan 我很确定他发布了预期结果和实际结果。
-
继续 Jonathan Leffler 所说的,如果
meh()返回由用户提供的输入形成的字符串,则printf(meh());表单可能会导致Uncontrolled format string vulnerability,更多信息在这里:en.wikipedia.org/wiki/Uncontrolled_format_string#Details -
鉴于问题的性质,我知道我之前的评论并没有太大帮助。但突出你面前的危险不会有任何害处。