![](/img/trans.png)
[英]How can I pass a string to a C function from Objective-C and get a value back?
[英]How can I pass a string value to a function in C
這困擾着我。 它給了我一個警告
passing argument 1 of ‘funcName’ discards qualifiers from pointer target type
但是,該程序可以正常運行並打印提交的值。
功能如下
void funcName(char *str) {
printf("%s", str);
}
void main() {
funcName("Hello world");
}
輸出是Hello world。
這是因為"Hello, world"
是常量,因此將函數更改為
void funcName(const char *text)
{
printf("%s\n", text);
}
字符串文字是常量,它們存儲在程序的只讀存儲區中,傳遞不帶const
的指針意味着您可能會意外地在目標函數內部對其進行修改,否則將導致未定義的行為 ,並且編譯器為試圖保護您免受此傷害。
此外, void main()
是不符合標准的有效簽名main()
你可以找到它的舊書,以前的標准,但現在它不再被接受,認可和標准簽名
int main(void)
如果不處理命令行參數。 int main(int argc, char **argv)
處理在命令行中傳遞的argv
中存儲的argc
參數。 看來問題在於此C程序被編譯為C ++程序。
在C ++中,字符串文字具有常量字符數組的類型。 因此,如果在C ++程序中提供字符串文字作為函數的參數,而該函數具有不帶限定符const的相應參數,則編譯器將發出一條消息。
如果將程序編譯為C程序,則該代碼是有效的,因為在C字符串文字中具有非恆定字符數組的類型,並且編譯器不應發布有關限定符的診斷消息。
不過無論如何,最好將函數聲明為
void funcName( const char *str );
^^^^^^
因為在這種情況下,函數的用戶可以確保傳遞給函數的字符串不會更改。
考慮到沒有參數的函數main應該像C一樣聲明
int main( void )
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.