gpt4 book ai didi

c++ - cpp 将 int 分配给字符串恶作剧

转载 作者:太空宇宙 更新时间:2023-11-04 12:02:33 27 4
gpt4 key购买 nike

我知道以下代码第 90 行中的错误出在哪里,我只是想不通为什么它会这样运行:

 83   string
84 getStringId(TokenType toktype)
85 {
86 map<TokenType, string>::iterator pos;
87 pos = TokenTypeMap.find(toktype);
88 string str;
89 if(pos != TokenTypeMap.end()) {
90 str = pos->first;
91 }
92 if(str.empty()) {
93 cerr << "Error: Invalid TokenType: " << toktype << endl;
94 exit(EXIT_FAILURE);
95 }
96 /* The following if block is only here for debugging */
97 if(str.length() == 1) {
98 cerr << "Error: String length == 1 :>" << str << "<:"<< endl;
99 exit(EXIT_FAILURE);
100 }
101 return str;
102 }

在第 90 行,我将 TokenType 分配给一个字符串。由于 TokenType 是一个枚举类型,我原以为这里会因为严格的类型而出现一些问题,但不幸的是,由于它实际上是一个 int,因此根本没有任何警告。原因在这里找到:

Why does C++ allow an integer to be assigned to a string?

这很好,但是,我注意到字符串不为空并且长度为 1,这与 char 所预期的一样。但是,如果我尝试在线打印 98,我会得到

Error: String length < 2 :><:

请注意标记之间没有打印任何内容>

最佳答案

您没有告诉我们实际值是多少,但它可能是 ASCII 中不可打印的字符。

这是一种相当奇怪的字符串用法。

关于c++ - cpp 将 int 分配给字符串恶作剧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13547470/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com