[C/C++]相对路径&绝对路径 斜杠&反斜杠的区别

2023-11-13

文件路径:正斜杠和反斜杠

正斜杠,又称左斜杠,符号是"/";反斜杠,也称右斜杠,符号是"\"。

 

文件路径的表示可以分为绝对路径和相对路径:

 

绝对路径表示相对容易,例如:

pDummyFile =fopen("D:\\vctest\\glTexture\\texture\\dummy.bmp", "rb");给出了从盘符开始的全部路径,这里需要注意的是“\”要用双斜线"\\",vc工程默认访问的目录是工程目录,

 

相对路径有以下多种形式,例如:

pDummyFile = fopen("dummy.bmp", "rb"); bmp文件就在vc工程目录下,和dsw文件同属一个目录。
pDummyFile = fopen("..\\texture\\dummy.bmp", "rb"); 表示bmp文件在工程目录的同级目录texture中,因此路径是先退出工程目录再进入texture目录访问到bmp文件。“..”表示退到当前目录的上一级目录(父目录)
pDummyFile =fopen(".\\texture\\dummy.bmp", "rb"); 表示bmp文件就在工程目录的子目录texture中,“.”表示当前默认目录,即vc工程目录,然后在进入其子目录texture访问到文件

值得注意的是:对相对路径而言,路径表示中的“\”也要用双斜线\\。因为c++中\\是一种转义字符,他表示一个\,就像\n表示回车一样。

所以C++中的路径名:

D:\matcom45\doc\users\_themes\m.dat

应为:

CString filename=_T("D:\\matcom45\\doc\\users\\_themes\\m.dat");

CStringfilename=_T("D:/matcom45/doc/users/_themes/m.dat");
"./" 加不加都一样,就是指当前目录

"../" 表示当前目录的上级目录,即当前的父目录。

 

 

在Unix/Linux中,路径的分隔采用正斜杠"/",比如"/home/hutaow";

而在Windows中,路径分隔采用反斜杠"\",比如"C:\Windows\System"。


  有时我们会看到这样的路径写法,"C:\\Windows\\System",也就是用两个反斜杠来分隔路径,这种写法在网络应用或编程中经常看到,事实上,上面这个路径可以用"C:/Windows/System"来代替,不会出错。但是如果写成了"C:\Windows\System",那就可能会出现各种奇怪的错误了。至于上述问题出现的原因,要从字符串解析这方面来分析。学过编程的人都应该知道,在C里面,输出字符串时,如果想输出一个换行,那就要加上'\n'这个标志,类似的,输出一个TAB,就加上'\t',也就是说,反斜杠("\")这个符号会把跟在它后面的字符结合起来转义成其它字符。根据这个原理,如果想输出双引号('"'),就需要输入'\"',这样才会将包含了双引号的字符串正确的写入内存中。那么如果想输入一个反斜杠呢?很简单,只要敲'\\'就可以了。
  看到这里或许有些人已经看出眉目了,如果"C:\Windows\System"这个路径字符串交给C编译器编译,实际写入内存的字符串并没有包含反斜杠"\",甚至紧跟在反斜杠后面的字母也一起被转义成了其它的字符,再次调用的话势必会出问题。  

       字符串解析不仅仅局限于C编译器,Java编译器、一些配置文件的解析、Web服务器等等,都会遇到对字符串进行解析的这个问题,由于传统的Windows采用的是单个斜杠的路径分隔形式,导致在对文件路径进行解析的时候可能发生不必要的错误,所以就出现了用双反斜杠"\\"分隔路径的形式。不管解析引擎是否将反斜杠解析成转义字符,最终在内存中得到的都是"\",结果也就不会出问题了。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

[C/C++]相对路径&绝对路径 斜杠&反斜杠的区别 的相关文章

  • 在C语言中使用“void”

    我很困惑为什么我们需要通过void转换为 C 函数 int f void return 0 versus int f return 0 什么是正确的做法以及为什么 In C int f 是一种老式的声明 它说f需要固定但未指定数量和类型的参
  • ASP.NET MVC 中的经典 ASP (C#)

    我有一个应用程序想要 最终 转换为 ASP NET MVC 我想要进行全面的服务升级 到 ASP NET 但想要使用当前的 ASP 内容来运行当前的功能 这样我就可以在对新框架进行增量升级的同时升级小部分 该站点严重依赖于不太成熟的 VB6
  • asp.net 文本框文本模式数字,仅允许数字

    我只是想知道 ASP NET 中是否有一种方法只允许文本框中的数字textmode number 当我使用这个时
  • 迭代变量并查找特定类型实例的技术

    我想迭代进程中内存中的变量 通过插件动态加载 并查找特定类型的实例 以前我可以找到特定类型 或内存中的所有类型 我可以创建类型的实例 我可以获取作为不同类型的字段包含的实例 但我无论如何都不知道只是 搜索 特定类型的实例 一种方法是使用 W
  • 构造函数中显式关键字的使用

    我试图了解 C 中显式关键字的用法 并查看了这个问题C 中的explicit关键字是什么意思 https stackoverflow com questions 121162 但是 那里列出的示例 实际上是前两个答案 对于用法并不是很清楚
  • 如何配置 WebService 返回 ArrayList 而不是 Array?

    我有一个在 jax ws 上实现的 java Web 服务 此 Web 服务返回用户的通用列表 它运行得很好 Stateless name AdminToolSessionEJB RemoteBinding jndiBinding Admi
  • 如何从 C# 控制器重定向到外部 url

    我使用 C 控制器作为网络服务 在其中我想将用户重定向到外部网址 我该怎么做 Tried System Web HttpContext Current Response Redirect 但没有成功 使用控制器的重定向 http msdn
  • Azure 事件中心 - 按顺序接收事件

    我使用下面的代码从 Azure Event Hub 接收事件 https learn microsoft com en us azure event hubs event hubs dotnet framework getstarted s
  • 基于xsd模式生成xml(使用.NET)

    我想根据我的 xsd 架构 cap xsd 生成 xml 文件 我找到了这篇文章并按照说明进行操作 使用 XSD 文件生成 XML 文件 https stackoverflow com questions 6530424 generatin
  • 生产代码中的 LRU 实现

    我有一些 C 代码 需要使用 LRU 技术实现缓存替换 目前我知道两种实现LRU缓存替换的方法 每次访问缓存数据时使用时间戳 最后比较替换时的时间戳 使用缓存项的堆栈 如果最近访问过它们 则将它们移动到顶部 因此最后底部将包含 LRU 候选
  • 将构建日期放入“关于”框中

    我有一个带有 关于 框的 C WinForms 应用程序 我使用以下方法将版本号放入 关于 框中 FileVersionInfo GetVersionInfo Assembly GetExecutingAssembly Location F
  • 当“int”处于最大值并使用 postfix ++ 进行测试时,代码定义良好吗?

    示例 未定义行为的一个示例是整数溢出的行为 C11dr 3 4 3 3 int溢出是未定义的行为 但这是否适用于存在循环的以下内容 并且不使用现在超出范围的副作用i 特别是 这是否后缀增量规格帮助 结果的值计算在副作用之前排序 更新操作数的
  • 如何一步步遍历目录树?

    我发现了很多关于遍历目录树的示例 但我需要一些不同的东西 我需要一个带有某种方法的类 每次调用都会从目录返回一个文件 并逐渐遍历目录树 请问我该怎么做 我正在使用函数 FindFirstFile FindNextFile 和 FindClo
  • 尚未处理时调用 Form 的 Invoke 时出现 ObjectDisposeException

    我们得到一个ObjectDisposedException从一个电话到Invoke在尚未处理的表格上 这是一些演示该问题的示例代码 public partial class Form2 Form void Form2 Load object
  • 将代码拆分为标头/源文件

    我从 Asio 的示例页面中获取了以下代码 class tcp connection public boost enable shared from this
  • 结构体指针的动态数组

    我必须使用以下代码块来完成学校作业 严格不进行任何修改 typedef struct char firstName char lastName int id float mark pStudentRecord pStudentRecord
  • 使用 C# 从 DateTime 获取日期

    愚蠢的问题 给定日期时间中的日期 我知道它是星期二 例如我如何知道它的 tue 2 和 mon 1 等 Thanks 您正在寻找星期几 http msdn microsoft com en us library system datetim
  • 使用 CSharpCodeProvider 类编译 C# 7.3 的 C# 编译器版本是什么?

    我想使用 Microsoft CSharp CSharpCodeProvider 类来编译 C 7 3 代码 编译器版本在 IDictionary 中指定 在创建新的 CSharpCodeProvider 时将其作为输入 例如 Compil
  • 带重定向标准流的 C# + telnet 进程立即退出

    我正在尝试用 C 做一个 脚本化 telnet 项目 有点类似于Tcl期望 http expect nist gov 我需要为其启动 telnet 进程并重定向 和处理 其 stdin stdout 流 问题是 生成的 telnet 进程在
  • 错误:无效使用不完整类型“类 Move”/未定义对 Move::NONE 的引用

    拜托 我不知道为什么这个简单的代码被拒绝 它给了我 2 个编译错误 请帮帮我 I use 代码 块 20 03 我的编译器是GNU GCC 移动 hpp class Move public Move Move int int public

随机推荐

  • C++ —— Argument Dependent Lookup

    命名空间的出现对于C 的影响是非常大的 比如说using声明和using指令或者使用namespace作用域加以限定的名字 还记得自己阅读的第一份源码是Laurent Gomila写的SFML游戏引擎 的源代码 阅读的第一份源码居然如此优美
  • 【03.02】大数据的多任务编程-进程

    当涉及到大数据处理时 多任务编程和进程管理是非常重要的概念 Python 提供了一些强大的库来处理这些任务 其中最常用的是 multiprocessing 模块 在本教程中 我们将使用 multiprocessing 模块来展示一个有关大数
  • RockerMQ集群部署

    目录 一 Broker集群模式 1 单Master 2 多Master多Slave模式异步复制 3 多Master多Slave模式同步双写 二 集群搭建实践 1 集群架构 2 克隆生成rocketmqos1 3 修改rocketmqos1配
  • Ubuntu-使用Xftp和Xshell连接

    流程如下 1 检查是否安装了 vsftpd vsftpd version 如果没有安装 则使用如下命令进行安装 apt get install vsftpd 2 检测是否安装了ssh ps e grep ssh 如果没有安装 则使用如下命令
  • 华为云备份会上传私密相册吗_2 亿部华为手机背后,这个功能不能忽视

    原标题 2 亿部华为手机背后 这个功能不能忽视 华为消费者业务昨天宣布 在全球消费者和合作伙伴的热情支持下 凭借华为 P20 系列 Mate20 系列 荣耀10 等多款华为 荣耀机型在市场上的优异表现 2018 年华为智能手机发货量 含荣耀
  • 逆序输出 之(单词整体顺序不变,单词的每个字母逆序输出)

    字符串反转 题目描述 小C很喜欢倒着写单词 现在给你一行小C写的文本 你能把每个单词都反转并输出它们吗 输入 输入包含多组测试样例 第一行为一个整数T 代表测试样例的数量 后面跟着T个测试样例 每个测试样例占一行 包含多个单词 一行最多有1
  • 【Java基础】重写equals方法详讲

    一 重写equals方法 Java比较学习 重写equals方法的安全写法 1 重写equals方法的两种方式 这里提供两个比较常见的equals重写方法 用instanceof实现重写equals方法 用getClass实现重写equal
  • 【Mojo】[英] Getting Started with Mojo ️‍

    本文共计5171字 预计阅读时间5分钟 注 此文被列入翻译计划 Mojo the new Programming Language for all AI developers is as simple as Python and as fa
  • wincc使用C脚本实现用户登录

    C脚本实现用户登录 脚本介绍 案例介绍 程序案例 脚本介绍 登录 pragma code useadmin dll include PWRT api h pragma code PWRTLogin 1 PWRTLogin 参数必须是 CHA
  • 如何用 Python 获取实时的股票数据?

    这个我会 先上图 这篇回答中 我将向你展示两种不同的代码版本 加强版和一般版 代码运行环境说明 非常重要 Python版本要求 Python 3 需要安装的库 efinance 库的安装方法是 打开 cmd 命令提示符或者其他终端工具 输入
  • moshi 极简封装

    目录 前言 Jackson的基本使用 Jackson获取泛型类型的巧妙处理 借鉴jackson优化moshi的封装 使用 总结 前言 之前写了一篇文章是介绍moshi的基本使用和实战 感兴趣的可以先看一下对kotlin友好的现代 JSON
  • Linux命令:kill

    kill命令 终止某个指定PID的服务进程 root LAPTOP HJMUH10E home simon kill 97 killall命令 终止某个指定名称的服务所对应的全部进程 root LAPTOP HJMUH10E home si
  • ESP32S3学习——SPIFFS 文件系统

    芯片 esp32s3 开发环境 espidfv4 4 一 官网相关资料 1 简介 SPIFFS 是一个用于 SPI NOR flash 设备的嵌入式文件系统 支持磨损均衡 文件系统一致性检查等功能 2 说明 目前 SPIFFS 尚不支持目录
  • Unity3D课程——离散仿真基础

    解释游戏对象 GameObjects 和 资源 Assets 的区别与联系 区别 GameObject 是由unity创建的实例 在场景中所有实际使用的对象都是游戏对象 即出现在场景栏中的对象 Asset 是可以用于游戏中的具体资源 如脚本
  • 数字IC验证:ARM总线协议AMBA中AHB、APB的简介、区别与联系

    写在前面 最近实习项目里用到这2个协议 因此简单整理一下 内容大多来自ARM官方文档与网络上的 我主要做一个整合 加上自己的理解补充 内容来源都会分别标出 如有侵权请指出 立刻删帖 官方文档入口 AMBA 包括AHB ASB APB 文章目
  • RocketMQ-名词和架构

    RocketMQ rocketMQ是做什么的我就不用解释了吧 以及他的背景 本文主要是为了让大家明白RocketMQ的工作原理 架构图 上图 双箭头代表是双向通信 ProducerGroup和ConsumerGroup以及Broker集群
  • 常说的一区二区含义是什么?

    一区和二区是对于SCI期刊的划分 用于评估期刊的学术声誉和影响力 这种划分通常是指SCI期刊的影响因子 Impact Factor 范围 一区期刊 Q1 是指影响因子排名靠前的期刊 即影响因子在某个学科领域中排名前25 的期刊 一区期刊通常
  • 树(Tree)——(二)链式存储

    用代码实现前序 中序 后序 第一种方法就是使用递归 另一种是使用栈 将分别讲述 目录 1 递归实现 main函数 C语言版本 2 利用栈实现 mystack h mystack cpp main函数 3 补充 求树高度的函数 1 递归实现
  • Charles抓取https请求及常见问题解决

    大家好 我是杨叔 每天进步一点点 关注我的微信公众号 程序员杨叔 获取更多测试开发技术知识 一 背景 APP测试的时候 通常都需要通过抓包工具抓取各类请求 查看接口的入参 返回值等 用于分析定位问题 常用的抓包工具有fiddler char
  • [C/C++]相对路径&绝对路径 斜杠&反斜杠的区别

    文件路径 正斜杠和反斜杠 正斜杠 又称左斜杠 符号是 反斜杠 也称右斜杠 符号是 文件路径的表示可以分为绝对路径和相对路径 绝对路径表示相对容易 例如 pDummyFile fopen D vctest glTexture texture