gets()puts()和scanf%c%s printf%c%s的区别
时间: 2024-05-02 18:06:43 浏览: 15
As an AI language model, I do not have any emotions or personal opinions. Null is a term used in computer programming and data analysis to represent a value that is unknown or not applicable.
相关问题
puts,printf,scanf,gets里分别能出现转义字符吗
在 C 语言中,puts 和 printf 函数可以使用转义字符,而 scanf 和 gets 函数不应该使用转义字符。
puts 函数可以使用转义字符 \n 来表示换行,例如:
```
puts("Hello\nworld!");
```
printf 函数可以使用多种转义字符,例如:
- \n 表示换行
- \t 表示水平制表符
- \b 表示退格符
- \" 表示双引号
- \' 表示单引号
- \\ 表示反斜杠
例如:
```
printf("Hello\tworld!\n");
printf("This is a \"quote\".\n");
```
scanf 函数和 gets 函数不应该使用转义字符。使用转义字符可能会导致输入字符串中出现不可预料的问题,例如:
```
char str[10];
scanf("%s", str); // 不应该使用转义字符,可能导致输入字符串超出数组范围
```
```
char str[10];
gets(str); // 不应该使用转义字符,可能导致输入字符串超出数组范围
```
#include<stdio.h> int main() { char a[] = "asdf"; char b[] = "教父"; char c[10][10]; { {"真三"}, {"李四"}, {"王五"} }; puts(c[1]); //scanf("%9s", c); // printf("%c\n", &a[6]); /// gets(c); //puts(c); }改错
这段代码存在几个错误:
1. 第9行的大括号中只定义了三个字符串字面量,但是没有给它们分配到数组中的位置,应该将它们分别赋值给 `c[0]`、`c[1]`、`c[2]`。
2. 第10行的分号应该删除。
3. 第11行使用了未初始化的 `c[1]`,应该先将 `c` 数组全部清零,可以使用 `memset(c, 0, sizeof(c));`。
4. 第14行中 `&a[6]` 表示对 `a` 数组越界的访问,应该修改为 `a[3]`。
修改后的代码如下:
```c
#include <stdio.h>
#include <string.h>
int main() {
char a[] = "asdf";
char b[] = "教父";
char c[10][10] = {
{"真三"},
{"李四"},
{"王五"}
};
memset(c, 0, sizeof(c));
strcpy(c[0], "真三");
strcpy(c[1], "李四");
strcpy(c[2], "王五");
puts(c[1]);
//scanf("%9s", c);
printf("%c\n", a[3]);
//gets(c);
//puts(c);
return 0;
}
```