C语言字符串指针问题

来源:百度知道 编辑:UC知道 时间:2024/06/21 20:14:22
#include<stdio.h>
void main()
{
void copy_string(char *from,char *to);
char *a="I LOVE DONG.";
char *b="I LOVE QIAN.";
printf("a=%s\nb=%s\n",a,b);
copy_string(a,b);
printf("a=%s\nb=%s\n",a,b);
}
void copy_string(char *from,char *to)
{
int i=0;
while(*(from+i)!='\0')
{
*(to+i)=*(from+i);
i++;
}
*(to+i)='\0';
}

大意是通过copy_string函数把字符串指针a的内容复制到b中

有两处错误,第一:
b指向常量指针,是不能被作为copy_string的参数的
第二:
copy_string函数完全没有考虑 char *to 的容量,容易越界

char *a="I LOVE DONG.";
char *b="I LOVE QIAN.";
改成char a[]="I LOVE DONG."; ,b[]="I LOVE QIAN.";
那样是不行的

#include<stdio.h>
void main()
{
void copy_string(const char *from,char *to);
char *a="I LOVE DONG.";
char b[]="I LOVE QIAN.";
printf("a=%s\nb=%s\n",a,b);
copy_string(a,b);
printf("a=%s\nb=%s\n",a,b);
}
void copy_string(const char *from,char *to)
{
int i=0;
while(*(from+i)!='\0')
{
*(to+i)=*(from+i);
i++;
}
*(to+i)='\0';
}
//原因分析:a和b指针指向的字符串都存放在静态区,不能改
//可以把b声明成数组
//因为char *from不变,所以建议声明成const 增强健壮性

char *a="I LOVE DONG.";
char *b="I LOVE QIAN.";
指定 *a,*b为字符变量,而"I