![](/img/trans.png)
[英]allegro/c++ cannot convert argument 3 from 'const char *' to '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.