include<stdio.h>
int main()
{
//char b[10];
char *a="goodone";
//a=b;
scanf("%s",a);//this scanf fails and thow segmentation fault.
printf("%s",a);
}
Run Code Online (Sandbox Code Playgroud)
为什么这不起作用?我用这个scanf试了很多但是,当我为我的变量保留内存a*(通过指定a = b(注释))它工作正常.否则它没有.我相信char*a会为其字符串("goodone")分配一些内存,并将该内存位置返回其值.和printf一起工作正常,为什么scanf没有?请救我这个....
这是因为您指示scanf将其读取的数据写入为该const char*值分配的内存中,即写入只读内存中。
如果您想让字符串常量可写,请更改
char *a="goodone";
Run Code Online (Sandbox Code Playgroud)
到
char a[]="goodone";
Run Code Online (Sandbox Code Playgroud)
请注意,这也不安全:当用户输入超过七个字符时,它可能会崩溃。为格式说明符添加限制以解决该问题:
scanf("%7s",a);
Run Code Online (Sandbox Code Playgroud)
PS 注释掉的a=b工作正常,因为它没有修改字符串常量;相反,它修改指向字符常量的指针,这是允许的。
| 归档时间: |
|
| 查看次数: |
1587 次 |
| 最近记录: |