2013-05-10 33 views
1

我只知道我們不能使用D:\demo.txt,因爲\d將被視爲轉義字符,因此我們必須使用D:\\demo.txt。但是幾分鐘前,我發現D:/demo.txt的工作原理與我們不必擔心的逃脫一樣好字符/。我在Windows上使用CodeBlocks,我想知道這些路徑格式中哪一個對我的平臺上的C有效。這裏是我的代碼和註釋行同樣正常。Windows上使用哪種路徑格式,「D:\ source.txt」或「D:/source.txt」?

#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

兩者都是有效的,正斜槓減少頭痛。 – 2013-05-10 03:35:33

+0

@DanielFischer如果我使用'char path [] =「D:\ encrypt.txt」並將'path'作爲參數傳遞給'fopen()',它會通過'printf()'顯示** ERROR **,但爲什麼它對'char path [] =「D:\\ encrypt.txt」''正常工作?「Plz回答這個問題是因爲它對於另一個問題太短了。 – Thokchom 2013-05-10 03:38:57

+0

我的意思是「D:\\ encrypt.txt」和「D:/encrypt.txt」都是有效的。您已經寫過,您必須避開問題中的反斜槓。 – 2013-05-10 03:40:38

回答

3

Windows(與之前的MS-DOS一樣)需要反斜槓作爲內置於/由Windows提供的命令行工具的路徑分隔符。但是,內部函數總是接受前向或後向斜槓交替使用。就個人而言,我更喜歡正斜線作爲一般規則,但主要是個人偏好 - 或者正常工作。

+0

當我在代碼中將'path'作爲參數傳遞給'fopen()'時,爲什麼我不會得到「未知的轉義字符\ e」警告,但是當我使用'fopen(「D:\ encrypt。 txt「,」w「'? – Thokchom 2013-05-10 03:50:06

+0

當我將'path'作爲參數傳遞時,即使稍後它不能讀取文件,它也會在沒有警告的情況下編譯,並且** printf()會打印** ERROR **。當我們在'path'的初始化中使用單個反斜槓時,警告是不存在的,但是如果在使用單個反斜槓的同時將字符串直接傳遞給'fopen()'? – Thokchom 2013-05-10 03:51:50

+0

簡單的答案是它很難可能在所有的情況下)來預測爲什麼編譯器可能會在一種情況下發出警告,但不是另一種看起來基本相似的警告。 – 2013-05-10 04:04:15

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語言沒有說明哪個字符被用作路徑分隔符;語言標準甚至沒有指定目錄支持。這取決於操作系統和文件系統。