-4

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

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

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

4

4 回答 4

1

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

于 2013-06-07T12:40:04.080 回答
1

缓冲区溢出,使用sprintf而不是snprintf(有点多余,我知道),参数应该是const char*,没有空检查,buff 周围不必要的括号,没有缩进,我明白了吗?

于 2013-06-07T12:41:33.823 回答
0
  1. 你不知道有多大first_namelast_name所以这会让你容易崩溃和缓冲区溢出黑客攻击。
  2. 使用前检查 first_name 和 last_name 是否为 NULL。
于 2013-06-07T12:40:44.127 回答
0

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

于 2013-06-07T12:40:46.620 回答