【问题标题】:cpp assign int to string shenaniganscpp 将 int 分配给字符串恶作剧
【发布时间】:2012-11-12 21:41:45
【问题描述】:

我知道错误在下面的代码中,第 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 字符值在您尝试打印时不会显示为普通字符。您为什么不尝试将 pos->first 打印为整数,然后看看您期望的字符是什么?
  • 该死,我应该得到那个。

标签: c++ string char


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-07-23
    • 1970-01-01
    • 1970-01-01
    • 2014-01-02
    • 2018-10-08
    • 2016-12-19
    • 1970-01-01
    相关资源
    最近更新 更多