我有一个简单的函数,可以将一些数据写入新文件。它可以工作,并且可以写入文件,但是在MSVS Express 2013中调试时出现上述错误。

void writeSpecToFile(const char *fname); //in header file.

char myChar [20];
sprintf(myChar, "aa%03daa%daa", i1, i2);
const char* new_char = myChar;
writeSpecToFile(myChar);

如图所示,我只是使用sprintf将一些变量插入字符串中(工作正常)。现在无论我通过myChar还是new_char,它仍然会给我带来错误错误。

什么地方出了错?

最佳答案

为什么要声明字符缓冲区大小为20? sprintf放置的字符多于myChar所能容纳的字符。

相反,使用

  • 更安全的构造,例如std::ostringstream或
  • 至少,
  • 声明您的char数组要比您期望的要大得多(这不是最佳方法,但至少不会发生错误)。

  • 如果您遵循“猜测我的阵列的最大尺寸”
    路线,您要做的最后一件事就是尝试数数
    到最后一个字符,缓冲区的大小。如果您丢失一个字节,可能会导致崩溃。

    关于c++ - 变量周围的堆栈…已损坏,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25223741/

    10-12 03:33