以下C函数有什么问题?

时间:2013-06-07 12:37:17

标签: c

我被要求在以下代码中找到两个主要问题。

char* name(char* first_name, char* last_name){
char buff[100];
sprintf (buff, "%s %s", first_name, last_name);
return (buff);
}

我发现只有一个问题。 buff数组是在函数范围内声明的。当返回调用此函数的函数时,它将返回一个指向“空”(即不是buff数组)的指针。 我找不到第二个问题。 你能帮忙吗? 谢谢!

4 个答案:

答案 0 :(得分:1)

一个是你说的,返回一个局部变量 一个是如果这个人有一个长名字,一个固定的buff [100]会溢出。

答案 1 :(得分:1)

缓冲区溢出,使用sprintf而不是snprintf(有点多余,我知道),参数应该是const char*,没有空检查,不必要的括号围绕buff,没有缩进,我做过得到它?

答案 2 :(得分:0)

  1. 您不知道first_namelast_name有多大,这样您就会崩溃并缓冲超支黑客。
  2. 在使用之前检查first_name和last_name是否为NULL。

答案 3 :(得分:0)

在我看来,有一些事情比错误更重要。首先,first_name和last_name应该是const char *,因为它们没有被修改......接口应该指定它。其次,没有错误或边界检查字符串的长度......你可能很容易在堆栈上出现缓冲区溢出......主要的安全问题。