#include <string.h>
void foo (char *bar)
{
char c[12];
strcpy(c, bar); // no bounds checking
}
int main (int argc, char **argv)
{
foo(argv[1]);
return 0;
}
答案 0 :(得分:2)
另一个 ACTUAL 选项:
void foo (char *bar)
{
char c[12];
snprintf(c, sizeof c, "%s", bar);
}
函数strncpy
无法确保结果字符串被NULL character
终止,因此您可以拥有bad resulting string.
答案 1 :(得分:0)
检查bar
的长度是否小于length of c
。
<强>码强>
#include <string.h>
void foo (char *bar)
{
char c[12];
if ( strlen( bar ) < sizeof c ) {
printf("avoiding buffer overflow");
strcpy( c, bar );
}
}
int main (int argc, char **argv)
{
foo(argv[1]);
return 0;
}
答案 2 :(得分:-1)
我安全了。否则,它与原始应用程序完全相同,即:没有。
int main (int argc, char **argv)
{
return 0;
}