我只知道我们无法使用D:\demo.txt
因为\d
将被视为转义字符,因此我们必须使用D:\\demo.txt
。但几分钟前我发现D:/demo.txt
1}}工作得很好,因为我们不必担心使用/
转义字符。我在Windows上使用CodeBlocks,我想知道路径中哪一种格式对我平台上的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);
}
答案 0 :(得分:4)
Windows(如之前的MS-DOS)需要反斜杠作为Windows内置/提供的命令行工具的路径分隔符。
然而,内部函数始终可以互换地接受前向或后向斜杠。就个人而言,我更倾向于使用正斜杠作为一般规则,但它主要是个人偏好 - 要么工作正常。
答案 1 :(得分:1)
Windows和MS-DOS接受正斜杠/
或反斜杠\
作为目录路径分隔符是正确的。在C代码中使用正斜杠有很好的论据,因为它不必在字符串和字符文字中进行转义。
但我自己的偏好是使用反斜杠(并记得正确地逃避它),因为大多数Windows用户可能不知道您可以使用/
作为目录分隔符。 fopen
电话无关紧要;这些是等效的(在Windows上):
fopen("D:\\foo\\bar\\blah.txt", "r");
fopen("D:/foo/bar/blah.txt", "r");
但是如果该文件名曾经向用户显示过,恕我直言,如果邮件引用D:\foo\bar\blah.txt
,它会好很多。
始终如一地使用其中一种。
顺便提一下,C语言没有说明哪个字符用作路径分隔符;语言标准甚至没有指定目录支持。它由操作系统和文件系统决定。