回 帖 发 新 帖 刷新版面

主题:C++ 字符指针函数返回字符串的值,但是空?

char *getstr(ifstream &infile)      //函数,返回文件中的字符串地址
{
string str;
//char *str_back = NULL;
//str_back = (char *) malloc (10 * sizeof(char));
char ch;
 getline(infile, str, ' ');
char *str_back = const_cast<char *>(str.c_str());
ch = infile.get();
while (ch != '\n')       //字符串后的内容都不要,换行
{
ch = infile.get();
}
cout << str_back;      //这个地方输出没有问题
return str_back;

}

int main(void)

{

ifstream infile;

char *com_str = NULL;

infile.open("output.txt", ios::in);
if (!infile)
{
cout << "Cann't open the file!" << endl;
exit(0);
}

com_str = getstr(infile);     //调用返回文件中的字符串地址
cout << com_str << endl;  //这个地方输出为什么和str_back的值不一样?空间释放了?跟踪查看地址没有问题
}

回复列表 (共2个回复)

沙发

你返回了一个局部变量(string str;)的内部地址

[code=c]
#include <fstream>
#include <string>
#include <limits>
#include <iostream>
using namespace std;

ifstream& getstr( ifstream& infile, string& str )
{
    getline( infile, str, ' ' );
    infile.ignore( numeric_limits<streamsize>::max(), '\n' );
    return infile;
}

int main( void )
{
    ifstream infile( "output.txt" );
    if( !infile )
    {
        cerr << "Cann't open the file!\n";
        return 1;
    }

    for( string str; getstr(infile,str); )
    {
        cout << str << endl;
    }

    return 0;
}
[/code]

板凳

谢谢,还是你的代码有用 后来我把str设成全局变量,可这样的话发现调用两次getstr后返回的地址是一样的[code=c] char *str_back = const_cast(str.c_str()); [/code] 因为有这语句。 比如 [code=c]str1 = getchar(infile);[/code] 和 [code=c]str2 = getchar(infile1);[/code] str1和str2的值总是一样的

我来回复

您尚未登录,请登录后再回复。点此登录或注册