2011-04-19 133 views
0

有人告诉我这段代码有一些严重的问题,但我一直没有能够解决这些问题。你们可以请教我这个吗?这段代码有什么问题

static char BASED_CODE szFilter[] = "HTML Files (*.xls)|*.xls|All Files (*.*)|*.*||"; 

const char* filter = "HTML Files (*.xlsx)|*.xlsx|All Files (*.*)|*.*||"; 
size_t length = strlen(filter); 
strcpy_s(szFilter, length + 1, filter); 
+0

如果您真的在使用C++,请考虑使用C++字符串。 – sarnold 2011-04-19 11:50:03

+0

什么是BASED_CODE?字符串文字的类型为'const char *'。 – pmr 2011-04-19 11:51:37

+1

也许代码声明.xls和.xlsx扩展名用于HTML文件的事实是另一个问题! ;-) – 2011-04-19 11:54:05

回答

2

嗯,缓冲区溢出,在我跃起出来 - szFilter不够大接收filter

既然您使用C++,为什么不使用std::string?这使得这些问题消失。

+0

+1有趣的方式来陈述(不那么)显而易见(可能很容易错过* .xlsx与* .xls) – 2011-04-19 11:50:38

1

strcpy_s()的第二个参数应该是目标的大小 buffer;你已经给它输入字符串的大小。

但是,当你在C++中工作时,应完全避免strcpy()(等),并使用std::string

0

szFilter短于filter,因此没有足够的地方将filter复制到szFilter。你当前的代码有未定义的行为。