scanf() 如何处理 C99 中的字符串?
How does scanf() work for strings in C99?
所以我正在制作学习 C 语言的纪录片,我想在指针和输入中制作示例。基本上,我用 C99 做了一个这样的 Hello, (name).
程序:
#include <stdio.h>
int main() {
char *name;
printf("What's your name? ");
scanf("%s", name);
printf("Hello, %s.\n", name);
}
当我尝试编译它时,它给我的错误是这样的:
C3.c:5:48: error: variable 'name' is uninitialized when used here [-Werror,-Wuninitialized]
printf("What is your name? "); scanf("%s", name);
^~~~
C3.c:4:17: note: initialize the variable 'name' to silence this warning
char *name;
^
= NULL
1 error generated.
<builtin>: recipe for target 'C3' failed
make: *** [C3] Error 1
所以我将第2行修改为char *result = "";
,这次真的成功了,但是输出是这样的:
What's your name? Bro
Segmentation fault
这让我有点困惑,因为我实际上并不习惯 scanf()
功能。
所以我的问题是,在 C99 中使用 scanf()
通过输入获取字符串而之后没有任何奇怪输出的更好方法是什么?
scanf
不分配任何内存。您需要自己分配字符串的内存。您还应该指定允许读取的长度 scanf
以避免缓冲区溢出。
例如:
char name[21]; // 20 chars plus the null-terminator
printf("What's your name? ");
scanf("%20s", name);
所以我正在制作学习 C 语言的纪录片,我想在指针和输入中制作示例。基本上,我用 C99 做了一个这样的 Hello, (name).
程序:
#include <stdio.h>
int main() {
char *name;
printf("What's your name? ");
scanf("%s", name);
printf("Hello, %s.\n", name);
}
当我尝试编译它时,它给我的错误是这样的:
C3.c:5:48: error: variable 'name' is uninitialized when used here [-Werror,-Wuninitialized]
printf("What is your name? "); scanf("%s", name);
^~~~
C3.c:4:17: note: initialize the variable 'name' to silence this warning
char *name;
^
= NULL
1 error generated.
<builtin>: recipe for target 'C3' failed
make: *** [C3] Error 1
所以我将第2行修改为char *result = "";
,这次真的成功了,但是输出是这样的:
What's your name? Bro
Segmentation fault
这让我有点困惑,因为我实际上并不习惯 scanf()
功能。
所以我的问题是,在 C99 中使用 scanf()
通过输入获取字符串而之后没有任何奇怪输出的更好方法是什么?
scanf
不分配任何内存。您需要自己分配字符串的内存。您还应该指定允许读取的长度 scanf
以避免缓冲区溢出。
例如:
char name[21]; // 20 chars plus the null-terminator
printf("What's your name? ");
scanf("%20s", name);