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;
}
案例一: 当我接受字符串输入时,它成功地给出了输出,写了这段代码:
#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;
}