欣坚强 2021-12-21 15:41 采纳率: 57.4%
浏览 27
已结题

为什么同样是将字符串复制给另一个函数之后,输出原函数,为什么第一个可以输出,第二个输出不了,并且第二个连指针p也输出不了

第一个


#include<stdio.h>
int main()
{
    char *a={"I am a student"};
    char *b;
    int i;
    for(i=0;*(a+i)!='\0';i++)
        *(b+i)=*(a+i);
    *(b+i)='\0';
    puts(b);
    puts(a);
    return 0;
}

第二个

#include<stdio.h>
int main()
{
    char *a="I am a student";
    char b[]="You are a student";
    char *p=b;
    for(;*a!='\0';a++,p++)
        *p=*a;
    *p='\0';
    
    puts(a);
//    puts(b);
    puts(p);
    return 0;
    
}

  • 写回答

2条回答 默认 最新

  • xysome 2021-12-21 15:54
    关注

    第一个按说b是需要先malloc一个动态内存空间的,你这没有做,可能系统自动为b分配了动态空间,所以,可以输出b。
    第二个,b的指针指向的是一个常量字符串,是一个静态内存空间,是不可以修改的,即便用p去取得b的指针地址,让然还是指向那个静态空间,因此p无法输出。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 1月14日
  • 已采纳回答 1月14日
  • 创建了问题 12月21日