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

Posted

技术标签:

【中文标题】C++ 运行时错误中的字符串【英文标题】:strings in c++ run time error 【发布时间】:2013-03-14 16:49:05 【问题描述】:

我正在开发一个从文件中读取 string 的 c++ 程序。在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

【问题讨论】:

操作系统是什么? 首先你应该在调试器中运行你的程序。这会告诉你错误在哪里。它还可以让您检查变量,因此您可能能够找出导致错误的是什么 while (!file.eof()) 已损坏,eof() 在尝试读取 之后 之前不会返回 true,因此您有一个错误。 far 最好写:while(getline(file, lineBuffer)) 除了你的具体问题,我认为@Evan 解决了,我建议你使用 stringstreams 解决这个问题。 【参考方案1】:

请在调试器中运行您的程序以了解它的具体行为。看看它与您的预期有何不同。

gdb 可能是最简单的,您可以通过谷歌搜索“gdb cheatsheet”左右开始。记得用-g编译。

【讨论】:

程序也将字符串用于下一行,但是当行缓冲区上的editint发生在第二行时,它给出的错误我不知道如何解决:(【参考方案2】:

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

另外,当std::string::find() 不匹配时,它返回string::npos 而不是-1。因此,您应该将posstring::npos 进行比较,而不是整数文字-1

【讨论】:

程序也将字符串用于下一行,但是当行缓冲区上的editint发生在第二行时,它给出的错误我不知道如何解决:(

以上是关于C++ 运行时错误中的字符串的主要内容,如果未能解决你的问题,请参考以下文章

使用 SET(C++) 检查两个给定字符串是不是为字谜时出现运行时错误

从逆序 C++ 访问向量时出现运行时错误 [关闭]

在 C++ 中为结构读取二进制文件的运行时错误

在 OpenCV (C++) 中使用 calcHist 的运行时错误

C++ MFC - 在 CDialog::OnSize 事件 (GetWindowRect) 上没有引发运行时错误的代码执行失败

C++程序运行内存错误