質問: argv[1] + strlen(argv[1]) - 1; while(p >= argv[1]){ printf("%c", *p); p--; } puts(""); } ```
回答: > > char *pの宣言で、なぜ引数の文字列に文字列の長さを足して-1をしているのですか? > > > 配列のインデックスは0から始まりますが、文字列の**長さ**は1から始まるからです。 そのため、文字列の末尾の配列上の位置は`strlen(文字列)-1`になるのです。 | 文字 | a | b | c | d | | --- | --- | --- | --- | --- | | 添字 | 0 | 1 | 2 | 3 | | 文字目(長さ) | 1 | 2 | 3 | 4 | > > 配列argv[1]には、This is a dogが格納されているという解釈でよろしいのでしょうか。 > > > 実際に表示してみれば簡単にわかりますが ``` #include #include int main(int argc,char *argv[]){ int i; printf("argc = %d\n", argc); for(i = 0;i < argc; i++) printf("%d: [%s]\n", i, argv[i]); } ``` 多くの処理系で、 * argv[0]には実行ファイルの名前 * argv[1~argc-1]にそれぞれの引数 が入ります。