You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++字符串操作问题:获取最后反斜杠后子串时程序崩溃求助

解决C++获取路径中文件名崩溃的问题

哦,这个问题我碰到过!崩溃的原因其实很直观,咱们一步步拆解:

崩溃的核心原因

你代码里用的是find_last_of('/'),但你的路径里全是反斜杠\(字符串里写\\是转义后的反斜杠),这时候find_last_of('/')会返回string::npos(表示找不到匹配字符)。当你把npos作为substr的起始位置时,这个值本质是一个极大的size_t类型数值,远远超过字符串的长度,直接导致程序访问非法内存,触发崩溃。

正确的实现方式

我们需要匹配反斜杠,并且从最后一个反斜杠的下一个位置开始截取,才能拿到文件名:

#include <string>
using namespace std;

int main() {
    string filename = "C:\\Shaders\\Test\\Model\\source\\scene.fbx";
    size_t lastSlashPos = filename.find_last_of('\\');
    string fileName;
    
    // 先判断是否找到反斜杠,避免极端情况(比如输入只有文件名)
    if (lastSlashPos != string::npos) {
        // 从反斜杠的下一位开始,截取到字符串末尾(substr第二个参数可省略,默认到末尾)
        fileName = filename.substr(lastSlashPos + 1);
    } else {
        // 如果没有反斜杠,说明输入本身就是文件名
        fileName = filename;
    }
    // 此时fileName的值就是"scene.fbx"
    return 0;
}

额外优化:兼容跨平台路径

如果你的代码需要同时处理Windows的反斜杠和Linux/macOS的正斜杠,可以把匹配字符改成双引号包裹的"\\/",这样两种斜杠都能识别:

size_t lastSlashPos = filename.find_last_of("\\/");

内容的提问来源于stack exchange,提问作者user8028736

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 09:03:40