user-0 提问: 给定数组长度，在赋值时大于数组长度，为什么输出没问题？

回复:
user: user-1
content: 引用 21 楼 lin5161678 的回复:引用 19 楼 Dr_W 的回复:逗号呢啥?算了，老哥你下过vs2017吗？ https://bbs.csdn.net/topics/395403080 我这个没人回我...

user: user-2
content: 引用 19 楼 Dr_W 的回复:逗号呢啥?

user: user-1
content: 引用 17 楼 lin5161678 的回复:引用 16 楼 Dr_W 的回复:引用 14 楼 lin5161678 的回复:引用 13 楼 Dr_W 的回复:%s输入的是字符串，相当于输入的是string类型的，遇到回车结束，string底层其是可以理解成可变长度数组不可以 没这么神奇什么不可以%s输入不能理解为底层可变长度数组逗号呢

user: user-2
content: 引用 16 楼 Dr_W 的回复:引用 14 楼 lin5161678 的回复:引用 13 楼 Dr_W 的回复:%s输入的是字符串，相当于输入的是string类型的，遇到回车结束，string底层其是可以理解成可变长度数组不可以 没这么神奇什么不可以%s输入不能理解为底层可变长度数组

user: user-1
content: 引用 14 楼 lin5161678 的回复:引用 13 楼 Dr_W 的回复:%s输入的是字符串，相当于输入的是string类型的，遇到回车结束，string底层其是可以理解成可变长度数组不可以 没这么神奇什么不可以

user: user-2
content: 引用 13 楼 Dr_W 的回复:%s输入的是字符串，相当于输入的是string类型的，遇到回车结束，string底层其是可以理解成可变长度数组不可以 没这么神奇

user: user-1
content: %s输入的是字符串，相当于输入的是string类型的，遇到回车结束，string底层其是可以理解成可变长度数组

user: user-2
content: 引用 4 楼 林涅槃 的回复:[quote=引用 1 楼 @矛盾综合体的回复:]内存现实存在，不管你用不用，你的代码只是将其分配，让程序员加以控制，所有没什么语法错误，只是可能有时越界会进入一些特殊的段域会报段错误等，其次%s只是表示你将输入的是一段字符串，首地址是a，长度什么的，没有限制的，打印则是遇到\0结束，与长度无关，但是还是建议不要越界。 谢谢，写程序时不会越界，至是想搞清楚而已[/quote]当然会越界 这是毫无疑问的

user: user-3
content: 引用 10 楼 林涅槃 的回复:[quote=引用 9 楼 @矛盾综合体的回复:][quote=引用 8 楼 林涅槃 的回复:] [quote=引用 6 楼 @矛盾综合体的回复:][quote=引用 5 楼 林涅槃 的回复:] [quote=引用 1 楼 @矛盾综合体的回复:]内存现实存在，不管你用不用，你的代码只是将其分配，让程序员加以控制，所有没什么语法错误，只是可能有时越界会进入一些特殊的段域会报段错误等，其次%s只是表示你将输入的是一段字符串，首地址是a，长度什么的，没有限制的，打印则是遇到\0结束，与长度无关，但是还是建议不要越界。 你好，我还有一个问题，空格也算字符，为什么在输入字符串a[11]中，如： how are you 时遇到空格后不是把空格赋值到数组里？而是只输入how呢[/quote] scanf无法接受到空格或者回车之类的字符，因为他是将其判断为一个格式输入的结束标志，如果我想接受这些特殊，可以用fgets或者gets[/quote] 为何在个字符变量赋值时，使用scanf（“%c%c%c”，&s,&d,&u）;输入a（空格）by，会把a赋给s，空格赋给d，b赋给u呢？[/quote] %c是接收一个字符，当然可以，上面是说%s，scanf是严格按照要求进行匹配的[/quote] 好的，清楚了，谢谢![/quote] 如果你的问题已经解决，请择优采纳，如果没有，可以留言或者私信，谢谢！

user: user-0
content: 引用 9 楼 @矛盾综合体的回复:[quote=引用 8 楼 林涅槃 的回复:] [quote=引用 6 楼 @矛盾综合体的回复:][quote=引用 5 楼 林涅槃 的回复:] [quote=引用 1 楼 @矛盾综合体的回复:]内存现实存在，不管你用不用，你的代码只是将其分配，让程序员加以控制，所有没什么语法错误，只是可能有时越界会进入一些特殊的段域会报段错误等，其次%s只是表示你将输入的是一段字符串，首地址是a，长度什么的，没有限制的，打印则是遇到\0结束，与长度无关，但是还是建议不要越界。 你好，我还有一个问题，空格也算字符，为什么在输入字符串a[11]中，如： how are you 时遇到空格后不是把空格赋值到数组里？而是只输入how呢[/quote] scanf无法接受到空格或者回车之类的字符，因为他是将其判断为一个格式输入的结束标志，如果我想接受这些特殊，可以用fgets或者gets[/quote] 为何在个字符变量赋值时，使用scanf（“%c%c%c”，&s,&d,&u）;输入a（空格）by，会把a赋给s，空格赋给d，b赋给u呢？[/quote] %c是接收一个字符，当然可以，上面是说%s，scanf是严格按照要求进行匹配的[/quote] 好的，清楚了，谢谢!

user: user-3
content: 引用 8 楼 林涅槃 的回复:[quote=引用 6 楼 @矛盾综合体的回复:][quote=引用 5 楼 林涅槃 的回复:] [quote=引用 1 楼 @矛盾综合体的回复:]内存现实存在，不管你用不用，你的代码只是将其分配，让程序员加以控制，所有没什么语法错误，只是可能有时越界会进入一些特殊的段域会报段错误等，其次%s只是表示你将输入的是一段字符串，首地址是a，长度什么的，没有限制的，打印则是遇到\0结束，与长度无关，但是还是建议不要越界。 你好，我还有一个问题，空格也算字符，为什么在输入字符串a[11]中，如： how are you 时遇到空格后不是把空格赋值到数组里？而是只输入how呢[/quote] scanf无法接受到空格或者回车之类的字符，因为他是将其判断为一个格式输入的结束标志，如果我想接受这些特殊，可以用fgets或者gets[/quote] 为何在个字符变量赋值时，使用scanf（“%c%c%c”，&s,&d,&u）;输入a（空格）by，会把a赋给s，空格赋给d，b赋给u呢？[/quote] %c是接收一个字符，当然可以，上面是说%s，scanf是严格按照要求进行匹配的

user: user-0
content: 引用 6 楼 @矛盾综合体的回复:[quote=引用 5 楼 林涅槃 的回复:] [quote=引用 1 楼 @矛盾综合体的回复:]内存现实存在，不管你用不用，你的代码只是将其分配，让程序员加以控制，所有没什么语法错误，只是可能有时越界会进入一些特殊的段域会报段错误等，其次%s只是表示你将输入的是一段字符串，首地址是a，长度什么的，没有限制的，打印则是遇到\0结束，与长度无关，但是还是建议不要越界。 你好，我还有一个问题，空格也算字符，为什么在输入字符串a[11]中，如： how are you 时遇到空格后不是把空格赋值到数组里？而是只输入how呢[/quote] scanf无法接受到空格或者回车之类的字符，因为他是将其判断为一个格式输入的结束标志，如果我想接受这些特殊，可以用fgets或者gets[/quote] 为何在个字符变量赋值时，使用scanf（“%c%c%c”，&s,&d,&u）;输入a（空格）by，会把a赋给s，空格赋给d，b赋给u呢？

user: user-0
content: 为何在个字符变量赋值时，使用scanf（“%c%c%c”，&s,&d,&u）;输入a（空格）by，会把a赋给s，空格赋给d，b赋给u呢？

user: user-3
content: 引用 5 楼 林涅槃 的回复:[quote=引用 1 楼 @矛盾综合体的回复:]内存现实存在，不管你用不用，你的代码只是将其分配，让程序员加以控制，所有没什么语法错误，只是可能有时越界会进入一些特殊的段域会报段错误等，其次%s只是表示你将输入的是一段字符串，首地址是a，长度什么的，没有限制的，打印则是遇到\0结束，与长度无关，但是还是建议不要越界。 你好，我还有一个问题，空格也算字符，为什么在输入字符串a[11]中，如： how are you 时遇到空格后不是把空格赋值到数组里？而是只输入how呢[/quote] scanf无法接受到空格或者回车之类的字符，因为他是将其判断为一个格式输入的结束标志，如果我想接受这些特殊，可以用fgets或者gets

user: user-0
content: 引用 1 楼 @矛盾综合体的回复:内存现实存在，不管你用不用，你的代码只是将其分配，让程序员加以控制，所有没什么语法错误，只是可能有时越界会进入一些特殊的段域会报段错误等，其次%s只是表示你将输入的是一段字符串，首地址是a，长度什么的，没有限制的，打印则是遇到\0结束，与长度无关，但是还是建议不要越界。 你好，我还有一个问题，空格也算字符，为什么在输入字符串a[11]中，如： how are you 时遇到空格后不是把空格赋值到数组里？而是只输入how呢

user: user-0
content: 引用 1 楼 @矛盾综合体的回复:内存现实存在，不管你用不用，你的代码只是将其分配，让程序员加以控制，所有没什么语法错误，只是可能有时越界会进入一些特殊的段域会报段错误等，其次%s只是表示你将输入的是一段字符串，首地址是a，长度什么的，没有限制的，打印则是遇到\0结束，与长度无关，但是还是建议不要越界。 谢谢，写程序时不会越界，至是想搞清楚而已

user: user-0
content: 引用 2 楼 與蘤舊縐的回复:你这个怎么是scanf("%s",&a)？？数组名前不需要取地址符 说得也是，谢谢提醒

user: user-4
content: 你这个怎么是scanf("%s",&a)？？数组名前不需要取地址符

user: user-3
content: 内存现实存在，不管你用不用，你的代码只是将其分配，让程序员加以控制，所有没什么语法错误，只是可能有时越界会进入一些特殊的段域会报段错误等，其次%s只是表示你将输入的是一段字符串，首地址是a，长度什么的，没有限制的，打印则是遇到\0结束，与长度无关，但是还是建议不要越界。