向量内的字符串变量会导致大量错误(WinMainCRTStartup)

string variable inside vector causes massive error (WinMainCRTStartup)

本文关键字:错误 WinMainCRTStartup 字符串 变量 向量      更新时间:2023-10-16

我在向量中有一个字符串变量,它得到一个字符串。

#include <vector>
#include <string>
using namespace std;
vector <string> buffer;
main(int argc, char *argv[]){
    buffer[0] = "foobar";
    return 0;
}

它会导致这个大规模的命令行编译器错误,该错误以以下内容开头:

WinMainCRTS的多重定义

...

然后错误继续,大约有 500 行不连贯的东西。我已经用这个编译器(GNU编译器)成功地编译了其他C++程序。我不知道为什么这个特定的程序会导致错误。

有两个问题。首先,您需要将返回类型添加到main:

int main() {
  ...
}

第二。你有一个空的缓冲区,所以当你在做buffer[0] = "任何东西"时,你会损坏内存(稍后当另一个函数访问损坏的对象时可能会发现)。发生这种情况是因为运算符 [] 未选中矢量。如果将其更改为:

int main() {
  buffer.at(0) = "foobar";
  return 0;
}

你会得到一个例外。