C语言 字符串输入

来源:百度知道 编辑:UC知道 时间:2024/09/19 19:47:52
#include <stdio.h>
int main(void)
{
char *str;
scanf("%s",str);
printf("%s\n",str);
return 0;
}
先定义一个指针,在用scanf输入一个字符串可以吗?
我vi编译能通过.但是运行时,提示:
“segmentation fault ( core dumped )
说可以的朋友,请在你自己的机器上调试一下。
为什么会这样呐?

这个指针str定义之后没有指向任何存储单元,这个错误编译不会报错,运行的时候会报段错误。

要想正确运行
可以在scanf前加:str=(char *)malloc(100);

不过要记着在程序结束前free(str);

我编译没问题

飘~~

定义char *str;时,仅仅是定义了一个字符指针,
它所指向的地址并没有被赋值,编译器也不会为它分配一个字符串存储空间。
所以实际上这个指针指向的是一个野地址。
在向野地之内写入数据时(scanf("%s",str)),一旦写入位置是系统所使用的存储区或者其他程序所使用的存储区,就会导致系统异常。

这么改:
#include <stdio.h>
int main(void)
{
char str[50];//声明一个字符数组,这样编译器就会开辟一块专用的存储区域了
scanf("%s",str);
printf("%s\n",str);
return 0;
}