2017-07-16 21 views
0

の配列が、私は26個の文字を含む単一の単語である2番目のコマンドライン引数を取ることができる方法があるとして、すべての文字を分離し、それらを新しい文字配列に入れますか?C - ストアコマンドライン引数私はこれらの2つのコマンドライン引数を使用している場合はシャア

./substitution qwertyuiopasdfghjklzxcvbnm 

この構文を使用しようとしましたが、有効かどうかわかりません。

char mapping[] = argv[1]; 

私はこの文はマッピングと呼ばれる文字の新しい配列を作成し、私はargv[1]が文字列であると仮定していますので、それを文字列に割り当てるだろうと思いました。次に、各インデックスは、コマンドライン引数ごとにそれぞれの文字を持つでしょう:

mapping[0] = 'q' 
mapping[1] = 'w' 
... 

ヒントありがとう! :)

+1

これはあまり意味がありません。Cの**文字列**はchar *( 'argv [1]' ** ** ** char *の配列です)に格納されています。それが明確に出くわすが、私の理解ARGVからなかった場合は申し訳ありませんが、[1]文字列ですが、私はARGVの内容を取りたい[1]文字列中のすべての文字が分離されている別の配列、に入れて –

+0

新しい配列 –

+3

の要素です。char mapping [strlen(argv [1])+ 1]; strcpy(mapping、argv [1]); ' – BLUEPIXY

答えて

2

あなたがそのような配列に値を代入傾けます。代わりにポインタを使用することができます。 argvはNULL終了文字列へのポインタの配列です。つまり、最後に0のASCII値を持つ文字 '\ 0'を持っています。

char *mapping = argv[1]; 

mappingは、最初の引数を指します。 最初のargのコピーが必要な場合は、文字列に十分なメモリを割り当ててmallocstdlib.h)という関数を作成し、それをstrcpystring.h)というメモリブロックにコピーする必要があります。

char *mapping = malloc(strlen(argv[1]) + 1); //strlen returns the size of the string not including the null character at the end. 
strcpy(mapping,argv[1]); 
... 
free(mapping);//then you will have to free the allocated space when you are done with it. 

mappingargv[1]のコピーであり、それはargc[1]に影響を与える習慣修正。

+0

ありがとう@DavidBowling私は答えを修正します。 –

+0

さて、標準では文字エンコーディングをASCIIにする必要はなく、代わりのエンコーディングの例があります(例:[EBCDIC](https://en.wikipedia.org/wiki/EBCDIC))。 [文字エンコーディングには最小限の制限があります](http://port70.net/~nsz/c/c11/n1570.html#5.2.1)、そのうちの1つは '\ 0'が表現されることですすべてのビットが0に設定されたバイト単位で指定します。 –

関連する問題