【问题标题】:What's wrong with this code [closed]这段代码有什么问题[关闭]
【发布时间】:2011-04-19 11:46:13
【问题描述】:

有人告诉我,这段代码有一些严重的问题,但我无法解决这些问题。各位大佬能教教我一下吗?

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);

【问题讨论】:

  • 如果你真的在使用 C++,也可以考虑使用 C++ 字符串。
  • 什么是BASED_CODE?字符串文字的类型为const char*
  • 也许代码断言 .xls 和 .xlsx 扩展名用于 HTML 文件这一事实是另一个问题! ;-)

标签: c++ strcpy


【解决方案1】:

好吧,缓冲区溢出向我扑来——szFilter 不够大,无法接收filter

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

【讨论】:

  • +1 以一种有趣的方式来说明(不那么)明显(人们很容易错过 *.xlsx 与 *.xls)
【解决方案2】:

strcpy_s()的第二个参数应该是destination缓冲区的大小;你已经给了它输入字符串的大小。

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

【讨论】:

    【解决方案3】:

    szFilterfilter 短,所以没有足够的地方将filter 复制到szFilter。您当前的代码有未定义的行为。

    【讨论】:

      猜你喜欢
      • 2011-03-30
      • 1970-01-01
      • 2013-04-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多