![](/img/trans.png)
[英]int main(int argc, const char * argv[]) AND file input
[英]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.