刚开始学C语言基础,最先接触的就是scanf和printf函数,后来练习时候发现scanf输入数字和字母时候如果字母前有空格,接收不到。一直想找到解决的办法,后来学到字符串数组时候,又接触到gets函数,但是编译运行之后会有警告。warning: this program uses gets(), which is unsafe.
//scanf输入
// 在程序中字符串是使用频率非常大的一种数据
// 因此常常需要根据条件修改字符串的内容
// 输入字符串
// scanf("格式字符串", 地址);
// 将用户输入的数据与格式化字符串进行匹配, 将匹配到的数据赋值给地址所在的内存
// 使用 %s 作为字符串的格式, 使用数组来存储字符串
// 使用语一般输入数据的方法一样, 但是有安全隐
int main(int argc, const char * argv[]) {
char str1[4];
scanf("%s", str1);
printf("%s\n", str1);
// 1)如果此时输入字符1234567890越界,则打印出来结果为1234567890
// 2)如果此时输入字符abc d,中间夹杂空格,则打印出来结果是abc
// gets() 函数
// 语法: gets(数组)
char str[5];
gets(str);
printf("%s\n", str);
输入1234567890
输出warning: this program uses gets(), which is unsafe.
1234567890
安全输入,自己写一个函数getstring()
void getString(char str[], int length) {
// 定义一个函数,返回到数组
int i = 0;
while (1) {
if (i == length - 1) {
str[i] = '\0';
// 1
while(getchar() != '\n') ; // 清空缓存的数据
// 2
// while (1) {
// char c = getchar();
// if(c == '\n') break;
// }
break;
}
char c = getchar(); // 从缓存中获取一个字符, 注意缓存中也许还有很多字符
if (c == '\n') {
str[i] = '\0';
break;
}
// 不为输入结束
str[i] = c;
i++;
}
}
这样就写出了一个安全输入字符的函数,然后调用即可 |
|