Bla*_*est 1 c string pointers constants
我已经声明了一个变量
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点缓冲区这是合理的大,而且避免提供很长的输入。)