字符串copy

简单的字符串copy

#include<stdio.h>
#include<string.h>
using namespace std;

void copy_string(char *from,char *to)
{
    while(*from!='\0')//'0'的ascii码是0,所以这里可以改成"while(*from)"。
    {
        *to++=*from++;
    }
    *to='\0';//在内存中,字符串的最后被自动加了一个'\0',所以整个字符串copy除了有效字符外,还应该加上这个
//    while((*to++=*from++)!='\0');//这里是先赋值后判断,简洁得不行,值得借鉴。
//    while(*to++=*from++);//这里当然也是用了ascii码
}
int main()
{
    char *str1="I love 7!";//这里的话,指针str1就是指向了"I love 7!"这个字符数组,虽然没有名字,但是是实际存在的。另外就是:这里的指针变量是指向了字符串常量,言外之意就是说,字符串常量中的内容不可改变,也就是不能再对其赋值。比如如果再加一句:str1[3]='r' 就是非法的。
    /*
    char a[100];
    a[0]='I';//对字符数组元素赋值,合法
    a="I love 7!";//这个是不合法的,为啥?因为a是字符数组的首地址,是个常量,不能被赋值,这个就和字符指针有本质区别了
    */
    char string_[30];//所以这里必须要设一个实际存在的数组!!!如果没有这一句的话,也就是说如果只定义了两个指针变量,这实际上并没有开辟数组存储空间
    char *str2=string_;//这样的话,两个指针变量就都有实际指向的对象了,这样才能作为实参
    copy_string(str1,str2);//指针变量做实参必须要使指针指向一个已经定义了的对象!!必须!!
    printf("%s\n",str2);
    return 0;
}

再说一下就是:
数组可以在定义时对各元素赋值,但是不能用赋值语句对字符数组中的全部元素整体赋值
比如:
char a[100]=“I love 7!”;//合法

char a[]=“I love 7!”;//合法

char a[100];
a[]=“I love 7!”;//不合法!!!

还有一个:

char *format;
format="a=%d,b=%f\n";
printf(format,a,b);

这个就是只要改变format的格式,就能改变输入输出格式,这种printf函数称为“可变格式输出函数”。

猜你喜欢

转载自blog.csdn.net/weixin_44049850/article/details/86435832
今日推荐