c++运行时错误中的字符串

strings in c++ run time error

本文关键字:字符串 运行时错误 c++      更新时间:2023-10-16

我正在编写一个c++程序,该程序从文件中读取string。在string的末尾有一些数字。我的任务是从字符串的末尾开始显示nth号。

这是我的代码。程序接受文件的路径:
#include<iostream>
#include<fstream>
#include<string>
#include<stdlib.h>
using namespace std;
int main(int argc,char** argv)
{
    ifstream file;
    int num,i=0,pos;    
    std::string lineBuffer;
    file.open(argv[1],ios::in) ;  
    while (!file.eof()) 
      {
         getline(file, lineBuffer);        
         if (lineBuffer.length() == 0)
              continue; //ignore all empty lines
         else 
           {
             pos=0;            
            std::string str1("");
            std::string str2("");
            std::string final("");
            std::string number("");
            std::string output("");
                while(pos!=(-1))
                {
                  pos=lineBuffer.find(" ");                               
                  str2=lineBuffer.substr(0,1);
                  lineBuffer=lineBuffer.substr(pos+1);
                  final+=str2;
                  i++;
                }
                number=final.substr((i-1));
                num=atoi(number.c_str());
                output=final.substr(i-(num+1),1);
                cout<<output;                            
           }    
      }
      file.close();
       return 0;
}

我的程序给出了文件第一行的正确输出。但之后它会给我一个运行时错误。我不知道为什么会这样。

我要发送到终端的文件包含:

a b c d 4
b e f g 2

请在调试器中运行您的程序以了解它正在做的特定行为。看看它在哪里偏离了你的期望。

gdb可能是最简单的,你可以通过谷歌搜索"gdb备查单"开始。记住用-g编译

您应该将pos声明为size_t而不是int,因为std::string::find()返回size_t

同样,当std::string::find()不匹配时,它返回string::npos而不是-1。因此,您应该比较posstring::npos,而不是整数字面值-1