gpt4 book ai didi

c++ - 从路径返回文件名

转载 作者:太空宇宙 更新时间:2023-11-03 10:32:00 25 4
gpt4 key购买 nike

我做错了什么?

打电话

printf(filename(exename));

我的函数应该返回文件名

const char* filename(const string& str)
{
const char* path;
size_t found;
found=str.find_last_of("/\\");
path = (str.substr(found+1)).c_str();

cout << str.substr(found+1); // ------------> is name ok

printf("\n\n");
printf(path); // ------------> is name not ok random numbers
printf("\n\n");
return path; // ------------> is not ok random numbers
}

最佳答案

str.substr(found+1) 返回一个临时 std::string。您在该临时 std::string 上调用c_str() 方法,并将返回的指针分配给path。当临时对象被销毁时(在 ;),你的路径指向垃圾。

帮自己一个忙,使用 C++(不是 C 与 C++ 的混合),使用像 std::string 这样的健壮的字符串类来存储字符串(而不是原始的潜在-悬挂 char* 指针):

std::string FileName(const std::string& str)
{
size_t found = str.find_last_of("/\\");
std::string path = str.substr(found+1); // check that is OK
return path;
}

另请注意,您对 path 变量名的使用令人困惑,因为该函数似乎返回文件名(而不是路径)。

更简单的重写(没有 path 变量):

std::string ExtractFileName(const std::string& fullPath)
{
const size_t lastSlashIndex = fullPath.find_last_of("/\\");
return fullPath.substr(lastSlashIndex + 1);
}


printf("Filename = %s\n", ExtractFileName("c:\\some\\dir\\hello.exe").c_str());

...或者只使用 cout(它与 std::string 配合得很好并且不需要 c_str() 方法调用像在 C printf() 函数中一样获取原始 C 字符串指针:

std::cout << ExtractFileName("c:\\some\\dir\\hello.exe");

关于c++ - 从路径返回文件名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14143801/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com