繁体   English   中英

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

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM