2012-02-16 3 views
0

私は現在、最初からstrstrを書くことに取り組んでいます。私のコードでは、私は文字列のインデックスを作成しており、最終的に別のポインタを使って文字列上の特定の点を保存する必要があります。ここで私はに苦しんでいたコードのセクションは、次のとおりです。指し示された指し示されたポイントへのポイント

char *save_str; 
for(int i=0;i<length_str1; i++) 
{ 
    if(str1[i]==str2[0]) 
    { 
     *save_str=str[i]; 

しかし、私がこれを行うことができないことを私に語っています。インデックス内の特定の文字を指すポインタを持つにはどうすればよいですか?

+0

コンパイラによって表示されるエラーメッセージは何ですか? –

+0

これは宿題の練習ですか? –

+0

あなたはこのようなことに取り組む前に、ポインタと物事の違いを理解しておく必要があります。 '* save_str'はあなたの文脈で意味をなさない。 –

答えて

0

クイック実践的な回答

save_str = &str[i]; 

拡張記述ボーリング回答

機能は "純粋なC" であります配列とポインタについては "C++"を参照してください。

プログラマはアドレスアレイ全体、あるいは最初のアイテムのを望んでいる

は、「&」オペレータは、さらにいくつかのコンパイラによってエラーや警告として考えられ、必要とされていません。プログラマはその後、「&」オペレータが必要とされ、特定の項目のアドレスを望んでいる

char *myptr = NULL; 
char myarray[512]; 

strcpy(myarray, "Hello World"); 

// this is the same: 
myptr = myarray; 

// this is the same: 
myptr = &myarray[0]; 

save_str = &str[i]; 

私は、これらの機能がpurpouseで、追加されたことを、どこかで読みました。

多くの開発者はこれを避けるため、ポインタ算術演算を使用し、代わりに:

... 

char *save_str; 
... 

// "&" not required 
char *auxptr = str1; 

for(int i=0; i < length_str1; i++) 
{ 
    // compare contents of pointer, not pointer, itself 
    if(*auxptr == str2[0]) 
    { 
     *save_str = *auxptr; 
    } 

    // move pointer to next consecutive location 
    auxptr++; 
} 

... 

は個人的に、私が望む、「&」常に使用する必要があり、混乱を避けます。 乾杯。

+0

非常に役に立ちます..ありがとう:) –

1

あなたはこれらの二つの方法から選択できます。

save_str = &str[i]; 

or 

save_str = str+i; 
関連する問題