2 cw290616609 cw290616609 于 2016.03.29 10:32 提问

scanf字符串的问题求解

编程实现用scanf读取一个字符串,然后打印出来。
char department[256];
scanf("%s",department);
printf("%s\n",department);
这个方法就能实现,而使用下面的指针方法就会出现报错(段错误 (核心已转储)
)。
char *department=Null;
scanf("%s",department);
printf("%s\n",department);
想问问为什么。
我的理解是前一种方法是事先申请了256的空间,而后者没有申请空间会导致溢出。
那么如果我不确定输入字符串长度的时候,该怎么处理呢?

2个回答

qq423399099
qq423399099   Ds   Rxr 2016.03.29 10:38
已采纳

给字符串指针赋值 你要事先给指针分配空间才行。指针只是个地址,你要往指针所指的地址里存放内容,就必须先给指针分配空间
如果是VS的话可以试试用scanf_s

cw290616609
cw290616609 谢谢!我用的是GCC,最后用malloc分配一段空间给指针就实现了。
一年多之前 回复
lx624909677
lx624909677   Ds   Rxr 2016.03.29 11:27

char *department = new char[1000];你那么写,department只有地址空间,也就是四字节的指针空间,没有存储数据的空间

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!