簡體   English   中英

以這種格式將argv變量傳遞給main的結果main(int argc,char const * argv)

[英]result of passing argv variable to main in this format main( int argc, char const * argv )

我試圖弄清楚以這種格式將argv變量傳遞給main的結果。 main(int argc,char const * argv)。

我知道使用它的正確方法是main(int argc,char const ** argv)或main(int argc,char const * argv [])。

這是我的代碼段,

#include <stdio.h>

int
main( int argc, char const * argv ) {
        for( int i = 0; i < argc; ++i ) {
               printf("%s\n", argv[i]);
        }
}

這是輸出,

$ ./a.exe

..

$ ./a.exe 1

2

....

$ ./a.exe 1 2

2

...

它從argv點獲取什么嗎? 為什么它在到達argc之前就終止了。

由於提供的類型和預期的類型不匹配,因此會導致未定義的行為 ,因此這顯然是違反約束的情況。

引用C11 ,第章節§5.1.2.2.1/ p2,( 重點是我的

如果聲明了它們,則主函數的參數應遵循以下約束:

  • ...

  • 如果argc的值大於零,則數組成員argv[0]argv[argc-1]包含在內)應包含指向字符串的指針 ,主機環境在程序啟動之前為其提供實現定義的值

您可以將char * argv[]重寫為char **argv 注意,考慮到數組衰減屬性,但是char *[]char *完全不兼容。


注意:

引用C11 ,第§5.1.2.2.1章,腳注10)

因此, int可以通過定義為typedef名稱來代替int ,或類型argv可以寫為char ** argv ,依此類推。

暫無
暫無

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

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