案例1: 当我接受字符串输入时,它成功地给出了输出,编写了这段代码:
#include <stdio.h>
int main()
{
char *str;
scanf("%s",&str);
printf("%s",&str);
return 0;
}
案例2: 另一方面,它会为此代码段引发运行时错误:
#include <stdio.h>
int main()
{
char *str;
scanf("%s",&str);
printf("%s",str);
return 0;
}
我发现这件事很奇怪,想知道为什么会发生...... 提前致谢。
最佳答案
这两种情况都不正确。
情况 1 之所以有效,是因为您很幸运,可能是通过提供短字符串作为输入。尝试类似“bfjabfabjkbfjkasjkvasjkvjksbkjafbskjbfakbsjfbjasbfjasbfkjabsjfkbaksbfjasbfkja”之类的内容,您很可能会遇到段错误。
您应该有一个与 str
关联的内存块,可以通过为其声明数组而位于堆栈上,也可以位于为它malloc
分配内存的堆上。
并且您不应该使用 &
运算符。
所以事情会是这样的:
#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;
}
关于c - C 中字符串的 printf 的意外输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40899122/