在Windows上的C中使用哪种路径格式;D:\\source.txt";或;D:/source.txt";?
我只知道我们不能使用在Windows上的C中使用哪种路径格式;D:\\source.txt";或;D:/source.txt";?,c,path,C,Path,我只知道我们不能使用D:\demo.txt,因为\D将被视为转义字符,因此我们必须使用D:\\demo.txt。但几分钟前,我发现D:/demo.txt可以很好地工作,因为我们不必担心//code>的转义字符。我在Windows上使用代码块,我想知道这些path格式中的哪一种在我的平台上对C有效 #include<stdio.h> int main() { char ch; FILE *fp,*tp; fp=fopen("D:\\source.txt","r"); //fp=fop
D:\demo.txt
,因为\D
将被视为转义字符,因此我们必须使用D:\\demo.txt
。但几分钟前,我发现D:/demo.txt
可以很好地工作,因为我们不必担心//code>的转义字符。我在Windows上使用代码块,我想知道这些path格式中的哪一种在我的平台上对C有效
#include<stdio.h>
int main()
{
char ch;
FILE *fp,*tp;
fp=fopen("D:\\source.txt","r");
//fp=fopen("D:/source.txt","r");
tp=fopen("D:\\encrypt.txt","w");
//tp=fopen("D:/encrypt.txt","w");
if(fp==NULL||tp==NULL)
printf("ERROR");
while((ch=getc(fp))!=EOF)
putc(~ch,tp);
fclose(fp);
fclose(tp);
}
#包括
int main()
{
char ch;
文件*fp,*tp;
fp=fopen(“D:\\source.txt”,“r”);
//fp=fopen(“D:/source.txt”,“r”);
tp=fopen(“D:\\encrypt.txt”,“w”);
//tp=fopen(“D:/encrypt.txt”,“w”);
如果(fp==NULL | | tp==NULL)
printf(“错误”);
而((ch=getc(fp))!=EOF)
putc(~ch,tp);
fclose(fp);
fclose(tp);
}
Windows(与之前的MS-DOS一样)需要反斜杠作为Windows内置/提供的命令行工具的路径分隔符
但是,内部函数始终可以互换地接受向前或向后斜杠。就我个人而言,我更喜欢正斜杠作为一种一般规则,但这主要是我个人的偏好——两者都很好。的确,Windows和MS-DOS接受正斜杠/
或反斜杠\
作为目录路径分隔符。在C代码中使用正斜杠有很好的理由,因为它不必在字符串和字符文本中转义
但我自己的偏好是使用反斜杠(记住要正确地转义它),因为大多数Windows用户可能不知道可以使用/
作为目录分隔符。无论是fopen
通话;这些是等效的(在Windows上):
但是,如果该文件名曾经向用户显示过,那么如果消息引用D:\foo\bar\blah.txt
,会更好
您可以对仅在内部使用的路径使用正斜杠,对出现在用户界面中的路径使用反斜杠,但这将比一致使用其中一个路径更困难,更容易出错
顺便说一句,C语言没有说明使用哪个字符作为路径分隔符;语言标准甚至没有指定目录支持。它是由操作系统和文件系统决定的。两者都有效,正斜杠使人头疼的事情更少。@Danielf如果我使用char path[]=“D:\encrypt.txt”
并将path
作为参数传递给fopen()
,它会通过printf()
显示错误,但为什么它对char path[]工作良好呢=“D:\\encrypt.txt”
?请回答这个问题,因为它太短了,不能回答其他问题。我指的是“D:\\encrypt.txt”
和“D:/encrypt.txt”“
是有效的。您已经在问题中写到必须转义反斜杠。@Danielpher当我们写D:\encrypt.txt
时,可以理解\e
会被误认为是转义字符,但为什么即使在char path[]=“D:\encrypt.txt”
中也会被误认为是转义字符呢?这就是语言所说的,字符串文本中的反斜杠(或字符常量)表示转义序列。当我在代码中传递path
作为fopen()
的参数时,为什么不得到“未知转义字符\e”警告,但当我使用fopen(“D:\encrypt.txt”,“w”时会得到该警告
?当我将路径
作为参数传递时,它编译时不会发出警告,即使以后它无法读取文件,错误由printf()打印出来
。为什么在路径的初始化中使用单个反斜杠时警告不存在,而在将字符串文本直接传递给fopen()
时使用单个反斜杠时警告不存在?简单的回答是很难(如果可能的话)要预测为什么编译器可能会在一种情况下给出警告,但在另一种情况下可能看起来基本相似。为什么printf(“Hello\012Jon”)可以工作,但printf(“Hello\10Jon”)不能工作,即使12个八进制是十进制10?我的意思是,在第一种情况下,由于换行,我们得到两行,但在第二种情况下没有换行。为什么printf(“Hello\0xAJon”)
仅打印你好
即使十六进制A与012八进制相同?@Thokchom:看起来你现在问的问题与原来完全不同——差异足够大,如果作为一个新的、单独的问题来问,可能会得到最好/最多的回答。
fopen("D:\\foo\\bar\\blah.txt", "r");
fopen("D:/foo/bar/blah.txt", "r");