奇怪的输出说明

3 c

#include <stdio.h>
int myfunc(char *str)
{
    char *ptr =str;
    while(*ptr++);
    printf("%s %s\n",str,ptr);
    return ptr-str-1;

}    
int main()
{
    printf("%d\n", myfunc("Princess Leia"));
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

OUTPUT:

Princess Leia %d

13
Run Code Online (Sandbox Code Playgroud)

ptr如何%d成为字符串?又为何ptr-str-113

Dan*_*her 8

while(*ptr++);
Run Code Online (Sandbox Code Playgroud)

ptrptr指向传递的字符串的终止0 时仍然增量,所以在此之后它指向0终止符后面.

使用"Princess Leia"as参数,ptr增加14次,因此返回值为14 - 1 = 13.

打印的是 - 除了未定义的行为,因为解除引用ptr通常是指向0终结符(它在这里)之后的未定义行为,实际上是传入的字符串,以及它的0终止符之后的字节.这里"%d\n",自格式字符串"%d\n" happened to be stored just after"Princess Leia".