dst指针你没有分配空间啊,当然不行了
简单点就是char dst[1000] = {0};
复杂点你就要先判断src字符串长度
int len = strlen(src);
然后char * dst = (char * ) malloc(sizeof(char) * len+1);
memset(dst,0,len+1);
最后printf("%s",dst);
不是printf("%s",*dst);
#include <stdio.h>
int main()
{
char * src = "Hello";
char dst[1000] = {0};
while(*dst++ = *src++);
printf("%s\n",dst);
return 0;
}
1.你定义了2个指针,而没有数组
其中src指向的是字符串常量,它是有分配内存的,而dst是个野指针,没有分配内存不说,也没有指向任何你自己申请的内存地址
那么它的值就是个随机值,指向一个随机地址,你往内存里随机地址赋值,是个受系统保护的操作,不允许你这样乱搞的
你要真赋值成功了,轻则系统崩溃重启,重则系统文件紊乱只能重装
2.字符串数组本身也是指针,它的地址指向的就是它的元素的地址
所以当你使用%s输出字符串的时候,写星和不写星都行,因为本来就是一样的值
int main()
{
char * src = "Hello";
char *dst,*dst1;
dst = (char *)malloc(100*sizeof(char));
dst1=dst;
while(*dst1++ = *src++);
printf("%s\n",dst);
return 0;
}
输出的时候,如输出字符串%s,不用加*。如想输出字符串中的某个字符%c,则加*,*src ='H‘。 char* dst; 这句定义dst 是指针变量,让它指向字符串 src , dst = src; 不用赋值:while (*dst++ = *src++); ,修改如下,供参考:
#include <stdio.h>
int main()
{
char* src = "Hello";
char* dst;
dst = src;
//while (*dst++ = *src++);
while (*dst) {
printf("%c ", *dst);
dst++;
}
printf("\n");
dst = src;
printf("%s\n", dst);
return 0;
}