printf()返回可以与strlen()不同吗?

Luc*_*fen 3 c string

只是出于好奇:

#include <stdio.h>
#include <string.h>

enum { BIG_NUMBER = 1024 };

int main(void)
{
    char mysterious_string[BIG_NUMBER];

    if (scanf("%1023s", mysterious_string) == 1) {

        if (printf("%s", mysterious_string) != strlen(mysterious_string)) {
            // Can this state occur?
        }
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

内在的'if'能否真实回归?我可以盲目地信任这两个函数(printf()strlen())来返回正确的值吗?

Fan*_*Fox 6

它绝对可以是不同的.

如果printf失败(由于许多原因),那么它将返回一个负数,该数字与从返回的值不同strlen.在所有其他情况下,它将是相同的.

注意:这是假设字符串为空终止并且scanf按预期工作.