【发布时间】:2013-06-03 16:56:35
【问题描述】:
我是否以某种错误的方式使用了 scanf()?
char *input;
scanf("%s", input);
printf("%s\n", input);
这在运行时失败。
【问题讨论】:
我是否以某种错误的方式使用了 scanf()?
char *input;
scanf("%s", input);
printf("%s\n", input);
这在运行时失败。
【问题讨论】:
声明char * 只会创建一个指针,它不会为字符串分配任何内存。您需要为输入分配内存。您可以通过malloc(以及free 完成后)动态地执行此操作,或者您可以声明一个静态大小的数组,如char input[100]。
【讨论】:
scanf() 不安全,至少在传统上是这样。这个link 讨论了一些克服这个问题的方法。
fgets 比 gets 更可取。
char *input;
这是一个指针。它不指向任何内存。
#include <stdlib.h>
#include <stdio.h>
int main()
{
//char *input;
char input[128];
memset(input, 0 ,sizeof(input));
scanf("%s", input);
printf("%s\n", input);
return 0;
}
【讨论】:
将char *input; 替换为char input[1024] = {0};
您应该确保传递给 scanf 的参数指向可以保存您的输入的缓冲区
【讨论】: