C++ C++;参数在运行时更改

C++ C++;参数在运行时更改,c++,arguments,readfile,C++,Arguments,Readfile,我有一个非常简单的函数,它应该读取一个txt文件并通过字符串类型的一个向量返回所有行。我已经使用调试器多次使用它,我注意到的唯一一件事是“fileName”的值在ifstream声明行上发生了更改。我做错了什么??Thx vector<string> readFile(char* fileName) { vector<string> fileLines; fileLines.clear(); string line; ifstream my

我有一个非常简单的函数,它应该读取一个txt文件并通过字符串类型的一个向量返回所有行。我已经使用调试器多次使用它,我注意到的唯一一件事是“fileName”的值在ifstream声明行上发生了更改。我做错了什么??Thx

vector<string> readFile(char* fileName)
{
    vector<string> fileLines;
    fileLines.clear();
    string line;
    ifstream myfile (fileName);
    if (myfile.is_open())
    {
        while ( myfile.good() )
        {
            getline (myfile,line);
            fileLines.push_back(line);
        }
        myfile.close();
    }
    return fileLines;
}
矢量读取文件(char*fileName)
{
矢量文件线;
fileLines.clear();
弦线;
ifstream myfile(文件名);
如果(myfile.is_open())
{
while(myfile.good())
{
getline(myfile,line);
文件行。向后推(行);
}
myfile.close();
}
返回文件行;
}
//////////////////////////////////

我有这个函数,它应该返回当前目录中所有txt文件的文件名

   vector<char*> getFileList()
    {
        vector<char*> fileNames;
        fileNames.clear();
        WIN32_FIND_DATA FindFileData;
        HANDLE hFind = INVALID_HANDLE_VALUE;
        char currentPath[_MAX_PATH];
        getCurrentPath(currentPath);
        strncat(currentPath, "\\*", 3);
        if (hFind = FindFirstFile(currentPath, &FindFileData))
        {

            string fileExtension = getExt(FindFileData.cFileName);
            if (fileExtension == "txt" || fileExtension == "TXT")
            {
                fileNames.push_back(FindFileData.cFileName);
            }
            while(FindNextFile(hFind, &FindFileData) != 0)
            {
                string fileExtension = getExt(FindFileData.cFileName);
                if (fileExtension == "txt" || fileExtension == "TXT")
                    fileNames.push_back(FindFileData.cFileName);
            }
        }
        return fileNames;
    }
向量getFileList() { 矢量文件名; clear(); WIN32_FIND_DATA FindFileData; 句柄hFind=无效的句柄值; 字符当前路径[_MAX_PATH]; getCurrentPath(currentPath); strncat(当前路径“\\*”,3); if(hFind=FindFirstFile(currentPath和FindFileData)) { 字符串fileExtension=getExt(FindFileData.cFileName); 如果(文件扩展名==“txt”| |文件扩展名==“txt”) { fileNames.push_back(FindFileData.cFileName); } while(FindNextFile(hFind和FindFileData)!=0) { 字符串fileExtension=getExt(FindFileData.cFileName); 如果(文件扩展名==“txt”| |文件扩展名==“txt”) fileNames.push_back(FindFileData.cFileName); } } 返回文件名; } 这就是函数的调用方式:

vector<char*> inputFileList = getFileList();
if (inputFileList.size() > 0)
{
    for (int a=0; a<inputFileList.size(); a++)
    {
        fileLines = readFile(inputFileList[a]);
    }
}
向量inputFileList=getFileList(); 如果(inputFileList.size()>0) {
对于(int a=0;a我打赌您从一个返回局部变量指针的函数获取文件名,例如:

char * getFilename() {
 char Filename[100] = "/foo";
 return Filename;
} 
上述内容无效-
Filename
内容在堆栈上,当
getFilename()
返回时将无效。
vector文件行;
将位于同一内存中,因此当您跨过
vector
构造函数时,
Filename
指向的数据将发生变化


编辑:参见,例如,有关这方面的更多信息

您是否启用了优化?您的代码不够。最好发布您的函数调用调用代码。优化是什么意思?我使用Mingw进行编译。Thxit看起来不错,函数是如何调用的?特别是“文件名”中的内容?我想这正是我的问题所在。但是我不知道我应该如何返回它,它对我有效…@Tom:使用
向量
-而不是
向量
。然后让
读取文件
获取一个
常量字符*
,并将
输入文件列表[a].c_str()
传递给它。