我想用 scanf
读取两个字符串并将它们存储在两个变量中。如何只有第一个似乎被正确读取,第二个只返回 (null)
,但我不确定为什么。
int main(int argc, char **argv) {
char *c, *p;
printf("Enter a command with a parameter: ");
scanf("%s%s", c, p);
...
}
有人有想法,出了什么问题?我没有发现任何错误,据我所知,它应该可以工作。
最佳答案
char *c, *p;
这些只是指针,后面没有任何内存。此外,它们未初始化,因此读取或分配它们的值或读取或分配给它们指向的内存将是未定义的行为,并将产生 nasal demons .
为了读取用户的输入,你需要一个地方来保存内存。
char c[20], p[20];
将为c
分配20个字符p
为 20 个字符. c
和 p
不是指针,而是数组 char[20]
.然而,在大多数情况下,数组处理程序“衰退”(读作:神奇地改变)为指针。
scanf
对于 "%s"
scanf 修饰符需要一个指向 char char*
的指针有足够的内存来保存输入的字符串。
我会这样做:
int main(int argc, char **argv) {
char c[20], p[20];
printf("Enter a command with a parameter: ");
scanf("%19s%19s", c, p);
}
19
在%19s
限制 scanf
这样它就不会将输入读取到 c
中越界的内存区域和/或 p
指针,这也会导致未定义的行为。
关于c - scanf 只读取第一个字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53377940/