user-0 提问: 我特么就懵逼了，我这行char name[40];怎么输出四十个烫字？

回复:
user: user-1
content: https://zhidao.baidu.com/question/123882045.html  这个里面讲了scanf和scanf_s的区别。  你如果还是想用scanf函数，在文件头加上下面这句代码，可以把C4996错误给屏蔽掉。   #pragma warning(disable:4996)

user: user-2
content: 引用 7 楼 qq_30519247 的回复:[quote=引用 5 楼 paschen 的回复:] [quote=引用 3 楼 狼二羊的回复:][quote=引用 1 楼 wanggui2015 的回复:] Visual Studio中，未初始化的栈空间用0xCC填充，而未初始化的堆空间用0xCD填充。 而0xCCCC和0xCDCD在中文GB2312编码中分别对应“烫”字和“屯”字。#include <stdio.h> #include <string.h> #define DENSITY 62.4 int main() { 	float weight, volume; 	int size, letters; 	char name[40];  	printf(name); 	printf("你叫啥\n"); 	scanf_s("%s", name); 	printf("%s,多大了\n", name); 	scanf_s("%f", &weight);  	getchar(); 	return 0; }  vs2015.我又写了几行，当我输入名字的时候，就闪退了。[/quote] scanf_s输入字符串还需要一个参数为缓冲区的大小  此外，最后输入留下的换行符\n仍在输入缓冲区中，会被你getchar接收导致程序直接结束，比如可以最后用两个getchar，其中一个用于接收掉\n   #include <stdio.h> #include <string.h> #define DENSITY 62.4 int main() { 	float weight, volume; 	int size, letters; 	char name[40];  	//printf(name); 	printf("你叫啥\n"); 	scanf_s("%s", name, 40); 	printf("%s,多大了\n", name); 	scanf_s("%f", &weight);  	getchar(); 	getchar(); 	return 0; } [/quote] 为什么后面要加40[/quote]  因为scanf_s是微软封装的安全函数接口，40是name的长度，scanf_s对于%s输入时需要字符串空间长度，这样保证输入字符串超过40时，不会导致越界溢出。

user: user-2
content: 引用 7 楼 qq_30519247 的回复:[quote=引用 5 楼 paschen 的回复:] [quote=引用 3 楼 狼二羊的回复:][quote=引用 1 楼 wanggui2015 的回复:] Visual Studio中，未初始化的栈空间用0xCC填充，而未初始化的堆空间用0xCD填充。 而0xCCCC和0xCDCD在中文GB2312编码中分别对应“烫”字和“屯”字。#include <stdio.h> #include <string.h> #define DENSITY 62.4 int main() { 	float weight, volume; 	int size, letters; 	char name[40];  	printf(name); 	printf("你叫啥\n"); 	scanf_s("%s", name); 	printf("%s,多大了\n", name); 	scanf_s("%f", &weight);  	getchar(); 	return 0; }  vs2015.我又写了几行，当我输入名字的时候，就闪退了。[/quote] scanf_s输入字符串还需要一个参数为缓冲区的大小  此外，最后输入留下的换行符\n仍在输入缓冲区中，会被你getchar接收导致程序直接结束，比如可以最后用两个getchar，其中一个用于接收掉\n   #include <stdio.h> #include <string.h> #define DENSITY 62.4 int main() { 	float weight, volume; 	int size, letters; 	char name[40];  	//printf(name); 	printf("你叫啥\n"); 	scanf_s("%s", name, 40); 	printf("%s,多大了\n", name); 	scanf_s("%f", &weight);  	getchar(); 	getchar(); 	return 0; } [/quote] 为什么后面要加40[/quote] 因为scanf_s是微软封装的安全函数接口，40是name的长度，scanf_s对于%s输入时需要字符串空间长度，这样保证输入字符串超过40时，不会导致越界溢出。

user: user-0
content: 引用 5 楼 paschen 的回复:[quote=引用 3 楼 狼二羊的回复:][quote=引用 1 楼 wanggui2015 的回复:] Visual Studio中，未初始化的栈空间用0xCC填充，而未初始化的堆空间用0xCD填充。 而0xCCCC和0xCDCD在中文GB2312编码中分别对应“烫”字和“屯”字。#include <stdio.h> #include <string.h> #define DENSITY 62.4 int main() { 	float weight, volume; 	int size, letters; 	char name[40];  	printf(name); 	printf("你叫啥\n"); 	scanf_s("%s", name); 	printf("%s,多大了\n", name); 	scanf_s("%f", &weight);  	getchar(); 	return 0; }  vs2015.我又写了几行，当我输入名字的时候，就闪退了。[/quote] scanf_s输入字符串还需要一个参数为缓冲区的大小  此外，最后输入留下的换行符\n仍在输入缓冲区中，会被你getchar接收导致程序直接结束，比如可以最后用两个getchar，其中一个用于接收掉\n   #include <stdio.h> #include <string.h> #define DENSITY 62.4 int main() { 	float weight, volume; 	int size, letters; 	char name[40];  	//printf(name); 	printf("你叫啥\n"); 	scanf_s("%s", name, 40); 	printf("%s,多大了\n", name); 	scanf_s("%f", &weight);  	getchar(); 	getchar(); 	return 0; } [/quote] 为什么后面要加40

user: user-0
content: 引用 4 楼 wanggui2015 的回复:scanf_s("%s", name, 40);  [quote=引用 3 楼 qq_30519247 的回复:] [quote=引用 1 楼 wanggui2015 的回复:] Visual Studio中，未初始化的栈空间用0xCC填充，而未初始化的堆空间用0xCD填充。 而0xCCCC和0xCDCD在中文GB2312编码中分别对应“烫”字和“屯”字。#include <stdio.h> #include <string.h> #define DENSITY 62.4 int main() { 	float weight, volume; 	int size, letters; 	char name[40];  	printf(name); 	printf("你叫啥\n"); 	scanf_s("%s", name); 	printf("%s,多大了\n", name); 	scanf_s("%f", &weight);  	getchar(); 	return 0; } vs2015.我又写了几行，当我输入名字的时候，就闪退了。[/quote][/quote] 为什么后面要加40

user: user-3
content: 引用 3 楼 狼二羊的回复:[quote=引用 1 楼 wanggui2015 的回复:] Visual Studio中，未初始化的栈空间用0xCC填充，而未初始化的堆空间用0xCD填充。 而0xCCCC和0xCDCD在中文GB2312编码中分别对应“烫”字和“屯”字。#include <stdio.h> #include <string.h> #define DENSITY 62.4 int main() { 	float weight, volume; 	int size, letters; 	char name[40];  	printf(name); 	printf("你叫啥\n"); 	scanf_s("%s", name); 	printf("%s,多大了\n", name); 	scanf_s("%f", &weight);  	getchar(); 	return 0; }  vs2015.我又写了几行，当我输入名字的时候，就闪退了。[/quote] scanf_s输入字符串还需要一个参数为缓冲区的大小  此外，最后输入留下的换行符\n仍在输入缓冲区中，会被你getchar接收导致程序直接结束，比如可以最后用两个getchar，其中一个用于接收掉\n   #include <stdio.h> #include <string.h> #define DENSITY 62.4 int main() { 	float weight, volume; 	int size, letters; 	char name[40];  	//printf(name); 	printf("你叫啥\n"); 	scanf_s("%s", name, 40); 	printf("%s,多大了\n", name); 	scanf_s("%f", &weight);  	getchar(); 	getchar(); 	return 0; }

user: user-1
content: scanf_s("%s", name, 40);  引用 3 楼 qq_30519247 的回复:[quote=引用 1 楼 wanggui2015 的回复:] Visual Studio中，未初始化的栈空间用0xCC填充，而未初始化的堆空间用0xCD填充。 而0xCCCC和0xCDCD在中文GB2312编码中分别对应“烫”字和“屯”字。#include <stdio.h> #include <string.h> #define DENSITY 62.4 int main() { 	float weight, volume; 	int size, letters; 	char name[40];  	printf(name); 	printf("你叫啥\n"); 	scanf_s("%s", name); 	printf("%s,多大了\n", name); 	scanf_s("%f", &weight);  	getchar(); 	return 0; } vs2015.我又写了几行，当我输入名字的时候，就闪退了。[/quote]

user: user-0
content: 引用 1 楼 wanggui2015 的回复:Visual Studio中，未初始化的栈空间用0xCC填充，而未初始化的堆空间用0xCD填充。 而0xCCCC和0xCDCD在中文GB2312编码中分别对应“烫”字和“屯”字。#include <stdio.h> #include <string.h> #define DENSITY 62.4 int main() { 	float weight, volume; 	int size, letters; 	char name[40];  	printf(name); 	printf("你叫啥\n"); 	scanf_s("%s", name); 	printf("%s,多大了\n", name); 	scanf_s("%f", &weight);  	getchar(); 	return 0; } vs2015.我又写了几行，当我输入名字的时候，就闪退了。

user: user-4
content: char name[40];局部变量未初始化

user: user-1
content: Visual Studio中，未初始化的栈空间用0xCC填充，而未初始化的堆空间用0xCD填充。 而0xCCCC和0xCDCD在中文GB2312编码中分别对应“烫”字和“屯”字。