Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Windows上的C中使用哪种路径格式;D:\\source.txt";或;D:/source.txt";?_C_Path - Fatal编程技术网

在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");