[英]C++ - Should argv[] in the int main be always of the type char* (or char** if argv is used)?
[英]C argv pointer type
我很困惑如何使用指針來使這段代碼工作:
#include<stdio.h>
int main(int argc, char *argv[]){
char* test = argv[1][0];
printf("hello %s\n", test);
}
這是錯誤:
incompatible integer to pointer conversion initializing
'char *' with an expression of type 'char'; take the address with &
[-Wint-conversion]
argv[1][0]
是char
。
argv[1]
的類型是char*
。
你需要使用:
char* test = argv[1];
如果您使用以下命令調用您的程序:
program "First Arguent" "Second Argument"
那么,在main
, argc
等於3
。
argv[0] = "program"
argv[1] = "First Arguent"
argv[2] = "Second Arguent"
argv[3] = NULL
鑒於這種情況,
argv[1][0]
的計算結果為的第一個字符argv[1]
其等於'F'
如果這是你想要的,你可以使用:
char test = argv[1][0];
如果你想獲得整個第一個參數,那么你需要使用:
char* test = argv[1];
第一個參數是argv[1]
,而argv[1][0]
是該參數的第一個字符 。 將代碼更改為
char* test = argv[1];
char * argv []是一個指針數組,每個指針指向一個字符數組(以null結尾)。假設您將“Hello World”作為命令行參數傳遞給您的程序。 string(null終止字符數組)的基址存儲在argv [1]中。 由於argv [1]指向一個字符串,因此argv [1] [0]給出第0個字符
字符串中的索引。
現在考慮你的任務:
char* test = argv[1][0];
這里使用argv [1] [0],實際上是在索引指向的字符串內部索引
argv [1],並將存儲在字符串第0個索引處的charcater分配給測試
指針。 由於“test”是指針因此,它必然存儲地址而不是值。
上面的賦值分配一個字符值來測試,因為字符是
內部表示為C中的整數,因此您會收到一條警告:
incompatible integer to pointer conversion initializing
這里整數值是指argv [1] [0],指針是test。
以上分配可用作:
char *test = &argv[1][0]; // assignment 1
這相當於:
char *test = argv[1]; // assignment 2
只要賦值1中的索引為0。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.