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;
}
为什么程序会崩溃?
展开
 我来答
风雷九州
推荐于2017-09-04 · TA获得超过3025个赞
知道大有可为答主
回答量:1127
采纳率:100%
帮助的人:430万
展开全部

*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'

寒寒家
2014-12-11 · TA获得超过2920个赞
知道大有可为答主
回答量:1482
采纳率:100%
帮助的人:1982万
展开全部
//看不明白你code的逻辑
为什么 p=(char *)malloc(100);//给p分配内存之后,又做

*p = a;?

如果想让p指针,指向数组a的话:应该 p = a;就可以了,而且不用上面的malloc分配内存。

如果是想动态的分配内存,那么就malloc就足够了,也就不用p = a;

另外只有malloc之类的申请的堆上的内存,才可以free。

而char a[100]这样的数组,不能free。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
ylcqucc
2014-12-11 · TA获得超过1436个赞
知道小有建树答主
回答量:862
采纳率:0%
帮助的人:334万
展开全部

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式