C 中字符串的 printf 意外输出

Unexpected output of printf for a string in C

案例一: 当我接受字符串输入时,它成功地给出了输出,写了这段代码:

#include <stdio.h>
int main()
{
    char *str;
    scanf("%s",&str);
    printf("%s",&str);
    return 0;
}

案例二: 另一方面,它会为此片段抛出运行时错误:

#include <stdio.h>
int main()
{
    char *str;
    scanf("%s",&str);
    printf("%s",str);
    return 0;
}

我发现这件事很奇怪,想知道为什么会这样... 提前致谢。

None 这两个案例是正确的。

案例 1 之所以有效,是因为你很幸运,可能是通过提供 字符串作为输入。尝试类似 "bfjabfabjkbfjkasjkvasjkvjksbkjafbskjbfakbsjfbjasbfjasbfkjabsjfkbaksbfjasbfkja" 的操作,您很可能会遇到段错误。

您应该有一个与 str 相关联的内存块,可以通过为其声明一个数组在堆栈上,也可以在堆上 malloc'ing 内存。

并且您不应该使用 & 运算符。

所以它会像这样:

#include <stdio.h>
int main()
{
    char str[50];   // 50 is arbitrary
    scanf("%s",str);
    printf("%s",str);
    return 0;
}

或者像这样:

#include <stdio.h>
#include <stdlib.h>
int main()
{
    char* str = malloc(50);   // 50 is arbitrary
    scanf("%s",str);
    printf("%s",str);
    free(str);
    return 0;
}