CClook 发表于 2021-5-31 12:32:02

c语言中关于字符串的输入与输出问题

代码如图所示,运行结果在右边
输入后无法进行输出
忽略屏幕有点脏

wp231957 发表于 2021-5-31 12:38:32

scanf_s有好几个参数呢,不能省略

肖-肖 发表于 2021-5-31 12:52:12

scanf_s改为scanf应该就可以了

万千只cnm 发表于 2021-5-31 13:33:56

ANSI C中没有scanf_s(),只有scanf(),scanf()在读取时不检查边界,所以可能会造成内存访问越界,例如分配了5字节的空间但是读入了10字节
char buf={'\0'};
scanf("%s", buf);如果输入1234567890,后面的部分会被写到别的空间上去。以上代码如果用scanf_s,第二行应改为scanf_s("%s",buf,5),表示最多读取5-1个字符,因为buf要放'\0'
scanf_s最后一个参数是缓冲区的大小,表示最多读取n-1个字符.
你改成scanf("s",a);
试试

kogawananari 发表于 2021-5-31 14:04:48

wp231957 发表于 2021-5-31 12:38
scanf_s有好几个参数呢,不能省略

话说为什么我学的时候得scanf里&a。直接a没关系吗

wp231957 发表于 2021-5-31 14:09:03

kogawananari 发表于 2021-5-31 14:04
话说为什么我学的时候得scanf里&a。直接a没关系吗

后面跟地址啊,数组名不就是地址

CClook 发表于 2021-5-31 14:24:37

肖-肖 发表于 2021-5-31 12:52
scanf_s改为scanf应该就可以了

Visual Studio版本没法使用scanf

wp231957 发表于 2021-5-31 14:26:38

CClook 发表于 2021-5-31 14:24
Visual Studio版本没法使用scanf

可以的

CClook 发表于 2021-5-31 14:31:48

各位知道问题所在了
char   c,s;
scanf_s("%c %s ,&c, 1,s,80);   //字符c输入1个,c后面跟1,s字符数组80个,所以s后面加80

万千只cnm 发表于 2021-5-31 14:42:27

CClook 发表于 2021-5-31 14:31
各位知道问题所在了
char   c,s;
scanf_s("%c %s ,&c, 1,s,80);   //字符c输入1个,c后面跟1, ...

{:5_102:} 能给个最佳嘛
页: [1]
查看完整版本: c语言中关于字符串的输入与输出问题