阅读scanf(3)文档。因为%s
是说
s Matches a sequence of non-white-space characters; the next
pointer must be a pointer to character array that is long
enough to hold the input sequence and the terminating null
byte ('\0'), which is added automatically. The input string
stops at white space or at the maximum field width, whichever
occurs first.
studentName
所以你的代码是错误的,因为它应该有一个数组
char studentName[32];
scanf("%s", studentName);
由于可能的缓冲区溢出,这仍然很危险(例如,如果您键入 32 个或更多字母的名称)。使用%32s
而不是%s
可能更安全。
还要养成在启用所有警告和调试信息的情况下进行编译的习惯(即,如果使用带有GCCgcc -Wall -g
的 GCC )。一些编译器可能已经警告过你。学习使用您的调试器(例如gdb
)。
此外,养成使用(或调用,参见fflush(3) )结束 - 不开始 -printf
格式字符串的习惯。\n
fflush
了解未定义的行为。你的程序有一些!它错过了一个#include <stdio.h>
指令(作为第一个非注释重要行)。
顺便说一句,用 C 语言阅读现有的自由软件代码也会教给你很多东西。