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分配一段空间给指针就实现了。
2 年多之前 回复
lx624909677
lx624909677   Ds   Rxr 2016.03.29 11:27

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

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
scanf输入字符串问题
1、 #include"stdio.h" #include"iostream" using namespace std; int main() {     char a[4]={'l','o','v','\0'};     printf("%s",a);     system("PAUSE");     return 0; }
scanf读入字符串与读入字符的区别
今天下午比赛时候有道题用c++输入输出是超时的,所以准备换上c试试,发现这么几个问题: 1、使用scanf("%c", &a)读取a(a是char类型),如果读取之前有换行符或者空格,那么a就会把之前的换行符或者空格读取到,解决方法就是这之前先getchar()一下。 2、而如果用scanf("%s", str)读取str(我发现str是char或者char[]都是可以的),不会读取前边的换行
如何让scanf接收包含空格的字符串
众所周知,scanf遇到空格或回车即停止接收字符串,今天学到一招,可以让scanf接收包含空格的字符串。 #include using namespace std;   int main() { char a[20]; scanf("%[^\n]",a); puts(a); return 0; } 这里主要介绍一个参数,%[ ],这个参数的意义是读入一个字符集合。[ ]是个
C语言---关于scanf读入字符串的一些问题
scanf是C语言中常用的标准输入输出函数,它的常规用法是scanf(“输入格式”,输入地址),scanf从输入缓冲区取入数据按照指定的“输入格式”存储到指定的“输入地址”。 但是有一类问题通常令人头疼,那就是字符串的读入,此处仅仅讨论使用scanf读取字符串的一些问题。 理论上你只需要定义一个字符指针,然后scanf每次读入字符存储到该指针所指的存储空间,之后指针值自动加1. 所以,我们就有了下面
scanf提取字符串 sscanf分离字符串 sprintf将数字转换为字符串
一、scanf提取字符串 字符串的输入是以空格为分割的,如果遇到需要将空格也作为内容读入字符串,则需要用以下格式:scanf("%[^\n]",str);这段语句的作用是str接收输入的字符串,直到碰到回车换行符为止,也就是回车前的内容均接收为str的内容。 比如要将three four+five six=中的three four赋值给strA,five six赋值给strB,则需要用
scanf怎样才能输入带空格字符串?
我们到知道采用scanf("%s",a);当遇到空格就自动截断了,怎样才能输入带空格的字符串呢?是不是只能用gets()?????明显不是,scanf是可以实现的。目前的scanf支持一种类似于正则表达式样式的输入,关于正则表达式的内容,大家可以自行解决。我们知道在正则表达式中[^\n]表示除了回车以外的所有字符,当然也包括空格啦!!!就用这个。代码如下: #include int main(
scanf 格式化字符串详解
scanf格式控制的完整格式:   %     *     m     l或h     格式字符   ①格式字符与printf函数中的使用方式相同,以%d、%o、%x、%c、%s、%f、%e,无%u格式、%g格式。   ②可以指定输入数据所占列宽,系统自动按它截取所需数据。如:   scanf( "%3d%3d", &a, &b);   输入:123456   系统自动将123赋给
scanf()的的返回值
在C语言中scanf()函数主要是用来读入函数的值,比如语句scanf("%d",&num),scanf函数读入一个值,并把它保存到num中。scanf()函数成功读取一个项目,它就会返回值1;如果它没有读取任何项目(当它期望一个数字而你键入的却是了一个非数字的字符或者字符串就会发生这种情况),scanf()聚会返回值0。当它检测到“文件结尾”(end of file)时,它就返回EOF(EOF是
用sprintf,scanf实现数字与字符串的转换
用sprintf,scanf实现数字与字符串的转换
for循环中scanf字符方法
在C语言中,如果使用字符型变量(就是char型)时在有连续输入的情况下,很容易因为出现垃圾字符而导致程序的流程非法。也就是c2存储了c1中没有存储的一个回车符号.c1没有接受回车符,这个符号存储在输入缓存中,当执行到第二个scanf的时候这个回车符就赋给了c2.所有程序没有提示你输入字符. 问题和原因说完了,现在说说解决的方法,方法有三个,可能有更多,而我不知道的,你可以自己思考一下 方法一: