gpt4 book ai didi

c - const char * 的 scanf 段错误

转载 作者:太空宇宙 更新时间:2023-11-04 00:32:00 25 4
gpt4 key购买 nike

我已经声明了一个变量为

const char* mode;

我想从用户那里获取mode 的值。当我使用

scanf("%s",mode)

我遇到了段错误。有什么建议吗?

最佳答案

应该scanf 调用中收到警告。

通过声明

const char* mode;

您将 mode 设为指向 const char 的指针,这意味着您无法修改 mode 指向的数据。

然后调用:

scanf("%s",mode);

它试图修改 mode 指向的数据。

gcc 对此发出警告:

warning: writing into constant object (argument 2) [-Wformat]

因此 mode 需要是一个指向非常量 字符的指针。而且,正如其他人所提到的,它需要指向一些实际数据,以便 scanf 可以修改该数据。这可能是导致段错误的原因,但由于您没有向我们展示 mode 是如何初始化的,因此很难判断。

mode 通常指向数组的第一个字符。那么这个数组有多大呢?由于您正在使用 scanf"%s" 格式,它可能不够大。 scanf("%s", mode)stdin 读取一个以空格分隔的字符串到 mode 指向的缓冲区中。您无法避免会溢出缓冲区的输入。

(如果这是初学者的练习,您可以暂时忽略缓冲区溢出问题;只需让 mode 指向一个相当大的缓冲区,并避免提供很长的输入。)

关于c - const char * 的 scanf 段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10630497/

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