【问题标题】:Substr() Runtime error: R6010 abort has been calledSubstr() 运行时错误:已调用 R6010 中止
【发布时间】:2013-07-14 19:49:57
【问题描述】:

我想将一个字符串转换为 4 个整数。

bignum::bignum(const std::string& s){
    std::string tmp;
    const unsigned int s_size = sizeof(s)/sizeof(char);
    const unsigned int max_size = 4; 
    const unsigned int parts = s_size/max_size; 
    unsigned int x = 3;

    for(int i = s_size;i>0;i-=4){
        tmp = s.substr(s_size-max_size, max_size);
        std::cout << num[x] << std::endl;
        std::istringstream (tmp) >> num[x--];
    }
}

num 是一个向量,int 类型。

我猜问题是因为 substr 超出范围,但不知何故我无法让它工作。

【问题讨论】:

  • sizeof(s) 将为您提供字符串对象的大小,而不是字符串中的字符数。为此,您必须调用 s.size() (或 s.length())
  • 我知道,但我想处理字符串中的每 4 个字节。这就是为什么我把它切成4个字节。也许我错了。顺便说一句,使用 .lenght 我得到了同样的错误。
  • This 解释了我的意思。
  • 如果我们有一个您期望的输入类型的示例,也会有所帮助。
  • 我认为您希望在substr 通话中使用i 而不是s_size,对吧?

标签: c++


【解决方案1】:

std::string 是一个类,而不是char 的数组,所以使用sizeof 会给出一个意想不到的数字。只需使用 size 成员函数即可:

const unsigned int s_size = s.size();

【讨论】:

  • @user2351645 你这是什么意思?
  • 我的意思是我得到了同样的错误信息。但我想我刚刚发现了问题。所以,我有字节值,而不是 char 序列的索引。那就是问题所在。 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-25
  • 1970-01-01
  • 2015-03-28
  • 2011-12-08
  • 1970-01-01
相关资源
最近更新 更多