プロが教えるわが家の防犯対策術!

○下記のコードについての質問になります

#include <stdio.h>

int main(
intargc,/*コマンドライン引数*/
char*argv[]/*コマンドライン*/
)
{
int counter;/*ループカウンタ*/

for( counter = 0 ; counter < argc ; counter++)
{
printf( "argv[%d]:%s\n" , counter , argv[counter] );
}
/*-----------------------------------------------------------
printf( "コマンドラインの1文字を抜き取る:%c" , ????????);
------------------------------------------------------------*/

return (0);
}

○質問
コマンドラインのプログラムになります。
「--」で囲っている部分になりますが、
コマンドラインに入力されている文字列の1文字だけを出力できるように
したいのですが、どうすればこれを実現することができるのでしょうか??
一例として

>command.exe orange ringe
^^^^^^

と、コマンドを打ったときに、「^^」の部分になりますが、
orangeの「a」だけを出力させたい場合を、知りたいと思っております。

以上、宜しくお願いします。

A 回答 (3件)

★コマンドラインの引数と文字列について


・『command.exe orange ringe』という2つの引数が与えられたとき
 (1)argv[0]…"command.exe"
 (2)argv[1]…"orange"
 (3)argv[2]…"ringe"
 (4)argv[3]…NULL
 となります。なお、argv[0]は処理系によっては、起動パス名などが空になる場合があります。注意!
・1つの引数から1文字の取得(argv[1] が "orange" の場合)
 (1)argv[1][0]…'o'
 (2)argv[1][1]…'r'
 (3)argv[1][2]…'a'
 (4)argv[1][3]…'n'
 (5)argv[1][4]…'g'
 (6)argv[1][5]…'e'
 (7)argv[1][6]…'\0'
 となります。これは main() 関数の定義で『char *argv[]』となっているため、ポインタへの配列は
 2次配列と同じような要領でアクセス(取得・設定)が可能です。

本題:
・上記のことから『orange』の『a』は argv[1][2] で取り出せます。→『*(argv[1] + 2)』でも可能。
 for 文と添え字のカウンタ変数を2つ使えば1文字ずつの出力が出来ます。
 『argv[counter][i]』という感じになります。
・以上。おわり。→上記のを参考に for 文の部分は KGM さんが記述して下さい。
    • good
    • 1
この回答へのお礼

納得しました^^
ポインタ配列なのをすっかり忘れていました。
色々なやり方があるので、なかなかそれに対応するのが難しいところです。

お礼日時:2007/04/08 21:12

argv[1][2]

    • good
    • 0

ちょっとしたサンプルです。



#include <stdio.h>
#include <string.h>

int main(int argc, char *argv[])
{
  if (argc >= 2)
    if (strlen(argv[1]) >= 3)
      printf("%c", argv[1][2]);
  return 0;
}

(注)インデントのため、全角空白を使っています。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
これを使って、プログラムを作成しました^^
また、何かあれば教えて下さい。

お礼日時:2007/04/08 21:13

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!