gpt4 book ai didi

c - C 中字符串的 printf 的意外输出

转载 作者:行者123 更新时间:2023-11-30 21:42:32 25 4
gpt4 key购买 nike

案例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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com