2016-11-26 19 views
-1

問題は、ポインタの配列を扱うのが実際にはわからないということです。ポインタの配列の位置に渡します。すべての位置、最後の入力。しかし、*演算子を使用すると、最初の文字だけが渡されます。ポインタの配列の入力文字列

int main(void) { 

    void prompt_str(const char *str[], char *const copy); //prototype 

    const char *str[ 20 ]= { '\0' }; 
    const char *copy= 0; 

    //prompt stringa 
    prompt_str(str, &copy); 

} //end main 

void prompt_str(const char *str[], char *const copy) { //definition 

    size_t n_str= 0, i= 0; 

    do { 
     printf("Insert a string\n:"); 
     fgets(copy, 100, stdin); 
     i= (strlen(copy)- 1); //get length 
     copy[ i ]= '\0'; //remove \n 

     str[ n_str++ ]= copy; //put string into pointer of array 

    } while (n_str< 3); 

} 
+1

あなたは 'のconstのchar *コピー= 0、入力を格納するための部屋を持っていない;' - > 'char型のコピー[100];' –

+0

@KeineLustは真実ではありません..コピーで私は文字列を取得する、私は定義された配列を使用したくない、それは無駄なスペースを引き起こし、charへのポインタで、それは私がそれで入力した要素だけをとります。 – dnt994

+1

あなたは正しいです、幸運は100バイトをアドレスに格納しています:) –

答えて

1

ポインタの概念が誤解されているようです。

あなたは

const char *copy= 0; 

を行うと、あなただけpointerを取得します。文字列を保持するメモリがありません。

代わり

char copy[100]; 

を行うことができます。これは、文字列(100文字未満)を保持するためのメモリを提供します。さらに、関数を呼び出すときにポインターである場合、copyをそのまま使用することができます。

またあなたのような動的メモリを使用することができます。

char* copy = malloc(100 * sizeof(char)); // Allocate memory 

// ... code 

free(copy); // Release memory 
+0

それは真実ではありません。私がデバッグするとき、コピーには私が入力した文字列があります。 "ciao"と入力すると "ciao"がコピーされますが、strに渡すと上のコードのように渡すと参照渡しとなりますので、コピーを変更するたびにstrを変更してください。これは私の問題です、私は値で全体のコピーを渡したいと思います。私のコードを試してみてください。 – dnt994

+0

@ dnt994ああ、はいそれは本当です...コンパイラからの警告をチェックしましたか?関数呼び出しに '互換性のないポインタ型'があります。 BTW:「Keine Lust」と私は助けようとしましたが、真剣に意見を述べるのではなく、間違っていると主張しています。どうして? – 4386427

+0

私は、私が信じていることを説明するためにtrynaでした、そして、私はそれが真実だと思います。しかし、もちろん、あなたが言ったことを真剣に受け取り、あなたの助けを借りて試してみます。私は試してみるとすぐにこのメッセージを編集します。たとえまだないのであれば、ありがとう、私は傲慢ではありませんでした:)。 – dnt994