不可以这样使用。声明 char *s
只是定义了一个指向 char 类型的指针变量,但并没有分配内存空间。如果直接使用 gets(s)
函数读取数据,则会出现未知的运行时错误(segmentation fault)。
为了正确使用 gets()
函数,需要先为 s
分配内存空间。可以使用以下几种方法:
-
使用字符数组或指针数组:
char s[100]; // 定义长度为 100 的字符数组 gets(s); // 读取字符串
或者:
char *s = malloc(100); // 动态分配长度为 100 的字符数组 gets(s); // 读取字符串 free(s); // 释放分配的内存空间
-
使用
fgets()
函数:char s[100]; fgets(s, sizeof(s), stdin);
-
使用
scanf()
函数:char s[100]; scanf("%s", s);
其中,使用 fgets()
函数和 scanf()
函数时,需要考虑字符串末尾的 ‘\n’ 符号。使用 fgets()
函数读取字符串时会将 ‘\n’ 符号一并读入,需要将其替换为 ‘\0’。而使用 scanf()
函数读取字符串时,会自动将字符串末尾的 ‘\n’ 去掉。