簡體   English   中英

C argv指針類型

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

那么,在mainargc等於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.

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