2011-04-19 192 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。你當前的代碼有未定義的行爲。