scanf字符串
发布日期:2019-02-10 17:29:26编辑:音乐人
概括:这道题是殷筛惩同学的课后练习题,主要是关于scanf字符串,指导老师为李老师。
题目:scanf字符串
解:选C.
A不用说了.
B是一个合法的“字符数组”初始化语句,但是不是一个正确的“字符串”赋值语句,因为字符串要求最后有字符串结束标志'\0'.
C对."ABCDE"是一个字符串常量,它存储在静态数据区中.
D不对.这个语句跟下面这种情况类似:
int *p;
scanf("%d", p);
p是一个野指针,不能直接往p指向的内存空间中输入数据.对于这个题目来说,只能用:
char s[10];
scanf("%s", s);这种操作.
举一反三
例1: 【以下能正确进行字符串赋值,赋初值的语句组是()Achar[5]={'a''e''i''o''u'};Bchar*s;s="good!";Cchars[5]="good!";Dchars[5];s=“good";】
思路提示:
B正确
A char[5]={'a' 'e' 'i' 'o' 'u'}; 没有终结符,不算字符串
B char *s;s="good!"; //定义一个字符指针,然后让这个指针指向常量字符串"good!",正确
C char s[5]="good!"; //"good!"有6个字符,s空间不够,会越界
D char s[5];s=“good"; //s是个数组名,是常量,不可以被赋值
相关思考练习题:
题1:为什么在C语言中,用scanf输入字符串时,不需加&
点拨:因为字符串变量名在 scanf 语句里 表示指针 (地址) 例如: char s[80]; scanf("%s",s); --- 这里的s 已是地址。 当然,写成 scanf("%s",&s[0] ); 也可以, &s[0] 是地址。
题2:★C语言 关于scanf输入字符串的问题
点拨:name=%s num=%d 它会按照你的格式来进行接收字符串到 一个内存地址中,但这个地址并不是 你定义的 name[20] 和 num ,而是 stdin 这个结构体中 _base 成员 指向的数据区,这个数据区叫 做 输入缓冲出,同理 还有 输出缓冲区 :stdout._base 。 s...
题3:关于用scanf输入 字符串
点拨:可以让你在运行完有效代码后,不至于直接运行到return 0就推出程序。你可以看运行结果,然后按任意键,2次getchar函数运行完后才退出程序。 如果你用visual studio2008或更高作为开发环境的话,编译生成的程序不用加这里最后的getchar,程序会主...
题4:用scanf输入字符串不需要&么>?
点拨:不要,因为a是一个字符数组名或指针,是地址性的
题5:scanf接受键盘输入字符串后末尾是否自动加'\0?'
点拨:是的,自动就加上了 #include "stdio.h" int main(void) { char s[100]; scanf("%s", s); printf("%s", s); } 自动就加上了,不用担心