【发布时间】:2010-10-07 16:43:16
【问题描述】:
我正在尝试使用 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;
}
非常感谢
乔
【问题讨论】:
-
我的行为没有任何变化(除了打印出字符)...
-
我粘贴了您刚刚发布的内容,我得到“索引为 6”作为输出。我认为您还有其他问题(例如可能没有重新编译?)
-
看不到任何明显的错误...
-
您的代码看起来应该可以正常工作,并且在此处使用 gcc (v4.3.4) 编译时,无论优化级别如何,它的行为确实正确(打印“索引为 6”)。您使用的是什么编译器和设置?
-
当您添加指令以查看值时,代码的行为会发生变化...在我看来就像一个 量子纠缠 中断问题...
标签: c