簡體   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