1

私はしばらくの間(Cで)これに取り組んできましたが、それを理解することはできません。文字の配列を含むバッファがあります。qsortを使用して配列を並べ替えましたが、すべて適切な順序になっています。重複を削除する必要があります(または重複せずにリストを印刷するだけです)。注意点があります。文字はN個の文字(ユーザーが指定したN)のグループにグループ化されます。つまり、1つの文字を次の文字と比較するだけではありません。それらのグループを互いに比較しています。

たとえば、入力がAADDBBEECCEEで、ユーザーが指定したNが2の場合、結果はAABBCCDDEE(EEの1つが削除されたもの)になります。

memcmpを使用する必要があることはわかっていますが、構文について混乱しています。私はしようとしています:

i=0;
int result;
int k;
while(i<bufferSize-nValue){
    result = memcmp(buffer[i], buffer[i+nValue], nValue);
    if(result==0){
       i=i+nValue;
    }
    else{
       for(k=0; k<nValue; k++){
          printf("%c",buffer[i]);
          i++;
        }
     }
 }

ここで、bufferは配列、nValueはN、bufferSizeは配列内の要素の総数です。コードを実行すると、セグメンテーション違反が発生し続けます。

皆さん、助けてくれてありがとう!

4

1 に答える 1

5

あなたが書いた:

memcmp(buffer[i], buffer[i+nValue], nValue);

memcmp()ポインタを取ります。あなたはおそらく、議論のために意味buffer+ibuffer+i+nValueます。それが答えなら、あなたのコンパイラがそれについて警告しなかったことに私は驚いています。警告を有効にしましたか?

于 2011-10-31T09:43:04.973 に答える