win/linux上,C/C++如何判断字符串路径参数是否合法

上层传入一个 const char* filepath; 参数,我们在使用时应该判断一下该路径的合法性再去使用,避免造成不必要的错误甚至崩溃。

1、判断路径为空

(1)判断指针是否是空

if(filepath) 等价于 if(filepath != nullptr)

(2)判断字符串是否为空

  • filepath[0] != '\0':只访问第一个字符,O(1),更快。

  • strlen(filepath):要遍历整个字符串直到 \0O(n)

对于非常长的字符串(例如读取配置路径、命令行参数),这种微小性能差异可能累积成开销。

2、判断路径是否存在

windows下和linux下引用头文件:

cpp 复制代码
#include <sys/stat.h>

#ifdef _WIN32
#include <io.h>       // for _access if needed
#define stat _stat    // MSVC uses _stat
#endif

判断方法:

cpp 复制代码
struct stat st;
if (stat(filepath, &st) == 0) {
    //说明路径是合法的
}
else {
    //路径不合法
}

//有必要,可检查一下该路径是否有写权限,防止对文件进行写操作时失败

3、判断文件是否能够以读/写方式打开

引用头文件:

cpp 复制代码
#include <stdio.h>

代码写法:

cpp 复制代码
FILE *fp = fopen(path, "r+");  // 读写方式打开(必须存在)
if (fp) {
    //可以打开
} else {
    //打开失败
}

以上三个步骤判断传入路径合法性大概就够了。