簡體   English   中英

“ const char **”類型的參數與“ const char *”類型的參數不兼容

[英]Argument of type “const char **” is incompatible with parameter of type “const char *”

我收到以下錯誤與此代碼:

string folder;
getline(cin, folder);

string folder2 = folder + "/index.txt";
const char* oldhtml[] = { folder2.c_str() };
folder2 = folder + "/index.html";
const char* newhtml[] = { folder2.c_str()};
rename(oldhtml, newhtml);

該錯誤發生於: rename(oldhtml, newhtml);

我對C ++相當陌生。 所以,如果這是一個簡單的解決方法,我深表歉意

看來您不明白這一行:

const char* oldhtml[] = { folder2.c_str() };

該數組聲明一個長度為1的數組folder2.c_str()元素是一個指針,該指針使用folder2.c_str()的結果進行初始化(可能指向字符串的內部存儲)。

但是,然后在下一行更改folder2 這會使先前對c_str的所有調用的結果無效,因此oldhtml[0]現在是懸空指針。

編寫此代碼的更好方法是始終使用string

string oldhtml = folder + "/index.txt";
string newhtml = folder + "/index.html";
rename(oldhtml.c_str(), newhtml.c_str());

const char* oldhtml[]創建一個char*數組(類似於const char** ),基本上,當您需要一個字符串(一個且只有一個char* )時,它是一個字符串數組(許多char* )。

要創建常規指針,請使用:

const char* oldhtmlconst char oldhtml[]

改用const char* oldhtml = folder2.c_str() :不需要有const char*數組

請注意,盡管oldhtml僅在folder2處於作用域內且保持不變的情況下才有效。 哪個不是。 您稍后對其進行修改。 繁榮!

順便說一句,如果rename更改了任何一個輸入參數, 則程序行為將是不確定的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM