0

そのため、文字列フラグメントの再構築プログラムを作成していますが、次のような問題が発生しています。一方の文字列がもう一方の文字列に含まれている場合、最初の文字列を 2 つの文字列のうち大きい方に設定する必要があります (これは、2 つの文字列を結合するときに重要です)。ただし、参照渡しが何らかの理由で混乱し続け、文字列が再割り当てされないため、マージが混乱します。

参照渡しは次のとおりです。

int oneRound(char*frags[], int* numFrags) {
    int currMax = 0;
    int max = 0;
    int mergeOne = 0;
    int mergeTwo = 0;
    char *fragOne;
    char *fragTwo;
    for(int i = 0; i < *numFrags; i++) {
            for (int j = i+1; j < *numFrags; j++) {
                    fragOne = frags[i];
                    fragTwo = frags[j];
                    currMax = FindMaxOverlap(&fragOne, &fragTwo);
                    if (currMax >= max) {
                            max = currMax;
                            mergeOne = i;
                            mergeTwo = j;
                    }
            }
    }

で呼び出される関数は次のとおりです。

int FindMaxOverlap(char**firstString, char**secondString)
      if (strstr(*firstString, *secondString) != NULL || strstr(*secondString, *firstString) != NULL) {
            maxOverlap = length;
            if (strlen(*firstString) < strlen(*secondString)) {
                    char *temp = *firstString;
                    *firstString = *secondString;
                    *secondString = temp;
            }
    } 
4

2 に答える 2

4

このコードは、(一時) 変数fragOneを変更していfragTwoます。

fragOne = frags[i];
fragTwo = frags[j];
currMax = FindMaxOverlap(&fragOne, &fragTwo);

array の要素を変更していませんfrags。これは意図した動作だと思います。配列要素のアドレスを渡して再割り当てを行います。

currMax = FindMaxOverlap(&frags[i], &frags[j]);

さらに、コメントでJiteによって指摘されているように、FindMaxOverlap()返さなければならないint場合、動作は未定義です。

于 2013-04-15T13:23:56.847 に答える