所以我正在编写一个字符串片段重组程序,并且遇到以下问题。如果另一个包含一个字符串,我需要将第一个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;
}
}
答案 0 :(得分:4)
此代码正在更改(临时)变量fragOne
和fragTwo
:
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
喜欢你的调试器:)