gpt4 book ai didi

C For 循环不起作用?

转载 作者:行者123 更新时间:2023-12-01 12:57:35 24 4
gpt4 key购买 nike

我正在使用 C 中的字符串作为字符数组,并且我试图确保我可以动态地将值传递到我的 for 循环中。

下面的代码可以正常工作,没有问题:

for (int i = -6; i < 11; i++) {
int test = OverlapStrength(fragments[1], fragments[2], i, 0);
printf("%d\n", test);
}

事实上,这段代码也有效:

for (int i = -strlen(fragments[2]) + 1; i < 11; i++) {
int test = OverlapStrength(fragments[1], fragments[2], i, 0);
printf("%d\n", test);
}

但出于某种原因,这段代码没有打印任何东西:

for (int i = -strlen(fragments[2]) + 1; i < strlen(fragments[1]); i++) {
int test = OverlapStrength(fragments[1], fragments[2], i, 0);
printf("%d\n", test);
}

我在循环之前检查了 -strlen(fragments[2]) + 1strlen(fragments[1]) 的值,他们检查了分别为 -6 和 11。显然,当我将这些值直接放入它们的位置时,循环有效,但是当我用 strlen 计算替换第二个时,它中断了,我无法弄清楚为什么我的生活。帮忙?

编辑

OverlapStrength 将其参数作为常量,因此我无法更改它们,所以我很确定我不会在进行时更改片段。这是方法声明:

int OverlapStrength(const char one[], const char two[], int startOne, int startTwo)

片段的内容应该不重要,但它们只是我试图从重叠片段中拼凑起来的字符串。我已经检查过我的片段是否全部正确输出,并且在声明此循环之外完成时是否正确计算了它们的长度。

最佳答案

strlen 返回 size_t 类型的值,对于您的情况,这可能是 unsigned int 的类型定义。然后,您正在比较 signed int (i) 和 unsigned int (strlen(...))。然后 C 决定将您的有符号值转换为无符号类型(因为 default type promotions )。 -6 转换为 unsigned int 是 4294967290,因此您的比较为假,因此循环结束。

要解决此问题,您可以将 strlen 转换为带符号的值,例如:

i < (int) strlen(fragments[1])

关于C For 循环不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8864004/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com