【问题标题】:c++ When I cast a string to an int, the int is just a random number?c ++当我将字符串转换为int时,int只是一个随机数?
【发布时间】:2016-08-13 15:48:57
【问题描述】:

所以我有一个编辑值的函数,但我在 main 中计算值以查看它输出 1309668848 并且每次运行程序时都会更改。 (这在预处理器中没有发生)。我已经为此苦苦挣扎了一段时间,并决定来这里寻求建议。

这是函数。

void GetDahInt() {
    std::string NewValueS;
    getline(std::cin, NewValueS);
    NewValue = (int)NewValueS.c_str();
}

【问题讨论】:

  • 是那个c字符串的地址。
  • 我也尝试使用 cin 来输入 NewValueS 但它仍然输出巨大的随机数
  • 您需要仔细考虑std::string::c_str() 返回的内容。
  • 你知道c_str是什么吗?如果你想convert a std::string to number为什么不搜索一下方法呢?

标签: c++ string int


【解决方案1】:

你可以使用

std::stoi( str )

丢弃任何空白字符(通过调用 isspace() 来识别),直到找到第一个非空白字符,然后尽可能多地获取字符以形成有效的 base-n(其中 n=base)整数表示和将它们转换为整数值。

来源:Documentation of stoi

【讨论】:

    【解决方案2】:

    NewValueS.c_str() 返回一个指向字符数组的指针。
    您正在将指针转换为 int(获取 c_str() 的内存地址)。

    见:http://www.cplusplus.com/reference/string/string/c_str/

    字符串::c_str 获取等效的 C 字符串 返回一个指向数组的指针,该数组包含以 null 结尾的字符序列(即 C 字符串),表示字符串对象的当前值。

    此数组包含构成字符串对象值的相同字符序列以及末尾的附加终止空字符 ('\0')。

    NewValue = (int)NewValueS.c_str(); 将地址转换为字符串,每次执行代码时地址都会改变。

    【讨论】:

      【解决方案3】:

      您正在寻找类似 @​​987654322@(字符串到 int)的东西,这样调用:

      std::string str = ...;
      int value = std::stoi(str);
      

      这里讨论了此选项与 std::stringstream 等其他选项相比的优缺点: How to parse a string to an int in C++?

      你的演员产生一个“随机”数字的原因是c_str返回一个指向char数组开头的指针。

      const char* 转换为int 是未定义的行为(这些类型甚至可能没有相同的大小),但可能会产生取决于std::string 分配位置的内存地址。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-10-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多