第一个
#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;
}
第一个按说b是需要先malloc一个动态内存空间的,你这没有做,可能系统自动为b分配了动态空间,所以,可以输出b。
第二个,b的指针指向的是一个常量字符串,是一个静态内存空间,是不可以修改的,即便用p去取得b的指针地址,让然还是指向那个静态空间,因此p无法输出。
第一个,你没有修改a的地址,而是用了a+i这种方式寻址
第二个,你直接把a给改了,它已经不指向原字符串的首地址了,而是指向结尾
你想直接改没问题,改之前先用一个指针变量把当前指针存起来,别弄丢了啊