关于c语言指针和数组问题

#include <stdio.h>
#include <string.h>

void swap(char *p1,char *p2)
{
char *temp=NULL;
strcpy(temp,p2);
strcpy(p2,p1);
strcpy(p1,temp);
}

main()
{
char *str1=NULL;
char *str2=NULL;
char *str3=NULL;
gets(str1);
gets(str2);
gets(str3);
if(strcmp(str1,str2)>0) swap(str1,str2);
if(strcmp(str2,str3)>0) swap(str2,str3);
if(strcmp(str1,str2)>0) swap(str1,str2);
printf("%s\n%s\n%s\n",str1,str2,str3);
}
请问下这段代码为什么不对,我知道把char *str1=NULL这些改成char str1[100]之类的数组就对了,但是我觉得用指针也应该一样啊,请教!

指针str在使用之前你的给他分配空间, 没有空间的话进行这种操作gets(str1);肯定会出错, char* str1 = NULL, 只是定义了一个指针, 并没有给他分配空间, 应该先给他分配空间, 在使用

char* str = (char*)malloc(sizeof(char) * 100);这样, 然后再最后别忘记释放
free(str);

char str1[100]这种形式是系统自动给str1分配了100个字节的空间, 所以不会出问题...
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-03-30
char *str1=NULL; //str1指向NULL,
gets(str1); //读取以个字串到str1中

str1是个指针,你没有给他分配空间,他指向一个不确定的位置
这是你又给他赋值,那他应该把读到的字串保存在什么地方呢?
所以就出错啦。

给指针赋值前一定要先分配空间,或者是让他指向一个确定的地址。


char ss[100];
char *p=ss; // 让他指向一个确定的地址
gets(p); //这样才能正确赋值

这样不会有错了