gpt4 book ai didi

c - printf() 语句对我的返回值有影响吗? - C 编程

转载 作者:太空狗 更新时间:2023-10-29 15:20:50 24 4
gpt4 key购买 nike

我正在试验 K&R C Programming Language 书中的一个函数,并使用指针来编写 strindex 函数而不是数组表示法。我有一个奇怪的问题,如果我在下面的代码中的两个点中的任何一个包含 printf() 语句,那么该函数返回正确的索引(在本例中为 6),但是如果我离开 printf() 语句,那么函数返回 -1。

我真的不明白为什么这会产生任何影响,如有任何澄清,我将不胜感激。这是我的代码:

#include <stdio.h>

int strindex(char *a, char *b) {

char *pa;
char *astart = a;
char *pb = b;
int len;

while(*pb++ != '\0')
len++;

while(*a != '\0') {
pa = a;
pb = b;
for(;*pb != '\0' && *pa == *pb; pa++, pb++)
;
if(len > 0 && *pb == '\0') {
return a - astart;
}
//printf("%c\n", *a);
a++;
}
//printf("%c\n", *a);
return -1;
}

int main() {

char *a = "experiment";
char *b = "me";

printf("index is %d\n", strindex(a, b));

return 0;
}

非常感谢

最佳答案

问题是自动变量len。由于您没有对其进行初始化,因此它以不确定(垃圾)值开始。然后你增加它,所以它最终会成为“垃圾 + b 的长度”。对已编译代码的任何单一更改,如额外的 printf 调用都可以更改 len 的起始值,从而改变程序的行为。

解决方案:int len = 0;,看看你的编译器能不能得到更多的警告。如果您使用的是 gcc,请使用 -O -Wall -Wextra 标志。然后您应该会收到如下警告:

strindex.c:8: warning: ‘len’ may be used uninitialized in this function

关于c - printf() 语句对我的返回值有影响吗? - C 编程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3883850/

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