爲什麼argvs會表現奇怪? 例如:C argv [2] ++ vs(char *)argv [2] ++?
這將按預期工作,打印第一個參數的第一個字符。
printf("%c", *argv[1]);
然而,這將打印在ASCII表(又名「一大」代表爲數字)的字符而不是打印第一個參數的第2個字符:
printf("%c", *(argv[1] + 1);
輕微修改將什麼都不做,完全相同的結果:
printf("%c", *(argv[1] + sizeof(char));
,有助於實際鑄造argv的唯一的事情[2]爲char *:
printf("%c", *((char*)(argv[1] +1));
這是怎麼發生的?我知道:
argv's type := char** argv
and argv[1] == *(argv + 1)
and argv[1]'s type should be char*
但顯然它不是,因爲我需要施放它?這怎麼可能?它被聲明爲char **,但它的成員不是char * s?
如果你想索引字符,爲什麼不'的argv [1] [0]','的argv [1] [1]'等? – crashmstr
你在第二個片段中缺少''''。也許如果你修復它,它會按預期工作。更新:第三個。第四。 –
向我們展示了令人驚訝的輸出的真實代碼, – pm100