一个极简单的C问题,大家贡献点意见!!!

来源:百度知道 编辑:UC知道 时间:2024/06/08 21:54:29
Linux+gcc
#include <stdio.h>
int main()
{
char* p;
scanf("%s", p);
printf("%s\n", p);
}
执行会有段错误
#include <stdio.h>
int main()
{
char* p,str[20];
scanf("%s", p);
printf("%s\n", p);
}
则没问题!
我要疯了~~
#include <stdio.h>
int main()
{
char *p=NULL;
scanf("%s", p);
printf("%s\n", p);
}
这样也会出错!
只能malloc么?

1程序P是野指针没分配空间,所以出问题。
2程序P还是野指针,没出问题是运气好。

应该改为
#include <stdio.h>
int main()
{
char* p;
p = malloc(256);
scanf("%s", p);
printf("%s\n", p);
}

gis19831203:

//改为char* p,str[20]; 后就没有问题,那是因为程序为str分配了空间,p默认指向了这段空间


有这回事? 你怎么知道的?

而且 char* str[20] 相当于 80 或 160 个char 不是20个...由sizeof(void *)决定

乐百哥:

1程序P是野指针没分配空间,所以出问题。
2程序P还是野指针,没出问题是运气好。


还是这个解释比较合理

原因上这样的:(希望能解决你的疑问)
1.
int main()
{
char* p; //p没有分配空间,想不名内存写一串字符肯定出问题了.

//改为char* p,str[20]; 后就没有问题,那是因为程序为str分配了空间,p默认指向了这段空间,如果你输入长度大于20的字符串恐怕又要出问题了.
scanf("%s", p);
printf("%s\n", p);
}

问题不在str[20]

在于你的指针没有分配内存,
可能出现未知错误!
malloc一下就ok了。

这个程序没有错误啊!!不过在向p赋字符串时,最好动态申请一定的内存空间!!