[英]printf() statement makes a difference to my return value? - C Programming
我正在尝试使用K&R C编程语言手册中的一个函数,并使用指针来编写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:警告:'len'可能在此函数中未初始化使用
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.