我有一部分代碼,我不明白它是如何工作的。爲什麼有可能傳遞一個字符串作爲字符指針
我int Save(int _key, char *file);
這種方法Save
接受字符串作爲字符指針Save(i, "log.txt");
原來是Save
方法我用fopen(file, "a+")
裏面發生了什麼,在年底和它完美的罰款。
但是,我不明白它如何接受"log.txt"
爲char *file
。
我有一部分代碼,我不明白它是如何工作的。爲什麼有可能傳遞一個字符串作爲字符指針
我int Save(int _key, char *file);
這種方法Save
接受字符串作爲字符指針Save(i, "log.txt");
原來是Save
方法我用fopen(file, "a+")
裏面發生了什麼,在年底和它完美的罰款。
但是,我不明白它如何接受"log.txt"
爲char *file
。
"log.txt"
不是std:string
實際上是含有{'l','o','g','.','t','x','t','\0'}
字符數組,其類型是const char[N]
其衰減到const char*
因此調用Save(i, "log.txt");
作品。
該調用有效,但編譯器會打印一條警告,指出從const char*
到char*
的轉換已在C++ 03中被棄用,並且在C++ 11中無效。
@juanchopanza你是正確的,編輯:-) –
是不是他的問題,當函數期望'char *'時爲什麼'const char *'被接受? – Slava
@Slava它可能是。我不知道。 –
的字符串文字"log.txt"
具有類型char const[N]
,按照§2.13.5/ 8:
普通字符串和UTF-8字符串文字也稱爲窄字符串文字。窄字符串文字的類型爲「n常量字符數組」,其中n是下面定義的字符串的大小,並且具有靜態存儲持續時間(3.7)。
當作爲參數傳遞,其衰減到指針,按照§4.2/ 1:
左值或類型的右值「陣列NT的」或「未知的陣列結合的T 「可以被轉換爲」指向T的指針「類型的prvalue。結果是一個指向數組的第一個元素的指針。
原因char const*
可以分配到char*
is mostly there for backward compatibility reasons,它has been deprecated in C++11。
它是'char const [N]'還是'const char [N]'?不記得數組是否有區別(但我相信有指針) –
@AlejandroDíaz沒有區別。當你在'*'之前或之後有'const'時,區別在於它分別指向值或指針的常量。 – Shoe
在C++中,用字符串文字初始化字符指針是完全正確的。 初始化後,我們可以像使用數組那樣使用該字符指針:
{
char *s="abc";
cout<<s[0];
cout<<s[1];
}
您使用的是C編譯器嗎? – Azad
@Azad我正在使用C++編譯器 – user3002135
你能更清楚你不明白的東西嗎?你爲什麼認爲它不應該被接受?是關於字符串與指針的問題還是關於const指針與非const指針的問題? –