[英]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.