c - 通过字符串引用传递

标签 c pointers memory pass-by-reference

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

这里是引用传递:

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

最佳答案

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

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

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

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

此外,正如 Jite 所指出的在注释中,FindMaxOverlap() 必须返回一个 int,否则行为未定义。

关于c - 通过字符串引用传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16015827/

相关文章:

pointers - Go struct literals,为什么这个是可寻址的?

c++ - 类之间的交叉引用和传递 This 指针 [NS2/C++]

无法访问 .bss 部分中的内存,但 gdb 'info files' 显示地址在范围内

windows - 内存相关术语的含义?

关于返回字符串长度的困惑

c - inotify 组 IN_MOVED_FROM 和 IN_MOVED_TO 吗?

Python 将 void 指针作为参数传递给 C 函数(SWIG、Numpy)

java - Android内存限制测试问题?

C指向结构中数组的指针传递给函数

c - 40条简单的行,1条令人讨厌的分割错误。我真的不知道现在还能去哪里