簡體   English   中英

如何將字符串值傳遞給C中的函數

[英]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.

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