通过引用传递字符串

时间:2013-04-15 13:01:33

标签: c pointers memory pass-by-reference

所以我正在编写一个字符串片段重组程序,并且遇到以下问题。如果另一个包含一个字符串,我需要将第一个String设置为两个字符串中较大的一个(当我将两个字符串合并在一起时,这是键)。但是,由于某些原因,我的引用传递一直在搞乱,并且字符串永远不会被重新分配,因此合并变得混乱。

以下是参考文献:

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;
            }
    } 

2 个答案:

答案 0 :(得分:4)

此代码正在更改(临时)变量fragOnefragTwo

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

它没有修改数组frags的元素,我认为这是预期的行为。传递数组元素的地址以实现重新配置:

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

此外,正如评论中Jite指出的那样,FindMaxOverlap()必须返回int,否则行为未定义。

答案 1 :(得分:0)

您是否尝试使用gdb单步执行代码?我不知道你正在使用什么编译器,但是使用gcc,你可以使用带有-g开关的gcc编译你的代码:

$ gcc -g maxover.c -o max

然后你可以使用gdb:

逐步完成它
 gdb max.out

喜欢你的调试器:)