转换字符串到c ++中的字符不正常工作

时间:2015-10-01 09:42:27

标签: c++ file-handling string-conversion

创建一个接收文件名但却无法正常工作的函数,因为它收到" Doctor.txtG"但是我正在给#34; Doctor.txt"我该如何解决?我的代码如下......

#include <iostream>
#include <conio.h>
#include <fstream>
using namespace std;

int number_of_lines = 0;

int numberoflines(string A);
int main()
{
    cout<<numberoflines("Doctor.txt");

    getch();
    return 0;
}

int numberoflines(string A)
{
    int Len;
    char Chr[Len];

    Len=A.length();
    A.copy(Chr, Len);

    //cout<<Len;
    cout<<Chr;

    string line;
    ifstream myfile(Chr);
    if(myfile.is_open())
    {
        while(!myfile.eof())
        {
            getline(myfile,line);
            number_of_lines++;
        }
        myfile.close();
    }
    return number_of_lines;
}

2 个答案:

答案 0 :(得分:1)

需要将以空字符结尾的字节复制到Chr中 使用

strcpy(Chr, A.c_str());

而不是A.copy(Chr, Len);

你应该正确地初始化Chr

char Chr[1024] 

char* Chr = new char[Len + 1].

答案 1 :(得分:1)

您的问题正在发生,因为您正在尝试创建一个大小为Len的char数组。但是在使用之前你没有初始化Len。这就是导致未定义行为并产生此问题的原因。在声明变量时总是尝试初始化变量。否则,这个问题会经常发生。

但是,您不需要创建另一个char数组。只需在参数中使用std::string::c_str();作为ifstream的构造函数。我在下面给出一个示例代码。这应该可以解决你的问题。

#include <iostream>
#include <conio.h>
#include <fstream>
using namespace std;

int number_of_lines = 0;

int numberoflines(string A);
int main()
{
    cout<<numberoflines("Doctor.txt");

    getch();
    return 0;
}

int numberoflines(string A)
{
    string line;
    ifstream myfile(A.c_str());
    if(myfile.is_open())
    {
        while(!myfile.eof())
        {
            getline(myfile,line);
            number_of_lines++;
        }
        myfile.close();
    }
    return number_of_lines;
}