C语言 为什么我的结果输出不出来
#include<stdio.h>#include<malloc.h>main(){charn='a',*p=&n;chara[100]="ajdskls";p=(cha...
#include <stdio.h>
#include <malloc.h>
main()
{
char n='a',*p=&n;
char a[100]="ajdskls";
p=(char *)malloc(100);
*p=a;
if(p)
printf("Memory Allocated at: %s",*p);
else
printf("Not Enough Memory!\n");
free(p);
getchar();
return 0;
}
为什么程序会崩溃? 展开
#include <malloc.h>
main()
{
char n='a',*p=&n;
char a[100]="ajdskls";
p=(char *)malloc(100);
*p=a;
if(p)
printf("Memory Allocated at: %s",*p);
else
printf("Not Enough Memory!\n");
free(p);
getchar();
return 0;
}
为什么程序会崩溃? 展开
3个回答
展开全部
*p = a;
这是什么赋值方法?字符串之间的赋值要用memcpy,memcpy(p,a,100);
如果只是单纯的*p = a的话,p是char *类型,*p就是char类型,而a是一个int *类型,即一个地址,地址一般使用32位数据来保存(64位机器使用64位数据保存)。这么赋值的话,*p并不是a的地址,而是a的地址中的一个8字节。
然后使用printf("Memory Allocated at: %s",*p);,打印*p,*p不是a的地址,那肯定会崩溃的。
两种写法。使用memcpy赋值。
char n='a',*p=&n;
char a[100]="ajdskls";
p=(char *)malloc(100);
//*p=a;
memcpy(p,a,100);
if(p)
//printf("Memory Allocated at: %s",*p);
printf("Memory Allocated at: %s",p);
else
printf("Not Enough Memory!\n");
free(p);
system("pause..");
p写成int *才可以。
char n='a',*p=&n;
char a[100]="ajdskls";
p=(char *)malloc(100);
*(int *)p=a;
if(p)
printf("Memory Allocated at: %s",*(int *)p);
else
printf("Not Enough Memory!\n");
free(p);
system("pause..");
补充,这种写法用C语言的编译器还可以编译通过。
如果使用C++的编译器,是不会编译通过的。
error C2440: '=' : cannot convert from 'char [100]' to 'char'
展开全部
//看不明白你code的逻辑
为什么 p=(char *)malloc(100);//给p分配内存之后,又做
*p = a;?
如果想让p指针,指向数组a的话:应该 p = a;就可以了,而且不用上面的malloc分配内存。
如果是想动态的分配内存,那么就malloc就足够了,也就不用p = a;
另外只有malloc之类的申请的堆上的内存,才可以free。
而char a[100]这样的数组,不能free。
为什么 p=(char *)malloc(100);//给p分配内存之后,又做
*p = a;?
如果想让p指针,指向数组a的话:应该 p = a;就可以了,而且不用上面的malloc分配内存。
如果是想动态的分配内存,那么就malloc就足够了,也就不用p = a;
另外只有malloc之类的申请的堆上的内存,才可以free。
而char a[100]这样的数组,不能free。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询