簡體   English   中英

可以在C ++中將參數從'const char []'轉換為'char *'嗎?

[英]Is possible to convert argument from 'const char []' to 'char *' in C++?

方法的定義是:

void setArgument(char *);

我用以下代碼調用該方法:

setArgument("argument");

但是我的VisualStudio編譯器讓我遇到下一個錯誤:

無法將參數1從'const char [10]'轉換為'char *'

是否可以發送這樣的參數,或者我必須在方法中更改參數類型? 另外,VS在輸出中向我顯示下一個注釋:注意:從字符串文字轉換會丟失const限定符(請參見/ Zc:strictStrings)

問題在於字符串文字是常量字符的數組。

盡管數組可以輕易地衰減為指向其第一個元素的指針,但該指針的類型為const char * 哪個必須是函數的參數類型。

而且,如果您需要修改傳遞的字符串,則應該創建自己的非常數數組:

char argument[] = "argument";
setArgument(argument);

當然,由於您使用C ++進行編程,因此應停止使用char指針和數組,而應使用std::string

有可能,就算您真的需要參數是可變的( char*而不是char const* ),也需要在可變內存中分配一個新存儲,並在該內存中克隆常量內存的內容(如果適合) “轉換”的定義。

auto const len = strlen(input);
auto const buf = std::unique_ptr<char[]>(new char[len + 1]);
memcpy(buf, input, len + 1);

如果您實際上需要char const* ,並且您使用的是C++17或更高版本,則可以將簽名更改為setArgument(std::string_view arg) ,以setArgument(std::string_view arg)濫用。

暫無
暫無

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

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