5. C言語は、関数を使用して文字列のコピーを実現します(strcpy()関数を使用しません)(複数のメソッドを含みます)
—————————————————————————————
(1)最初の方法:配列添え字アクセスを使用する(推奨)
#include<stdio.h>
//第一种方法:使用数组下标访问
void Copy1(char*des,char*src)//des是目标,src是源字符串
{
int i;
for(i=0;src[i]!='\0';i++)//当src[i]出现'\0'时,代表字符串遍历结束
{
des[i]=src[i];//给des[i]赋值
}
des[i]='\0';//给复制好的des[i]的结尾加上'\0',代表字符串的结束
}
int main()
{
char arr[10]="abcdefg";
char brr[10];
Copy1(brr,arr);//调用函数1
printf("brr是%s",brr);//输出复制好的字符串数组brr
printf("\n");
return 0;
}
実行結果
—————————————————————————————
(2)2番目の方法:ポインタの逆参照を使用して配列にアクセスする(あまりお勧めしません)
#include<stdio.h>
//第一种方法:使用指针解引用访问(原理:利用p[i]等价于*(p+i))
void Copy2(char*des,char*src)//des是目标,src是源字符串
{
int i;
for (i = 0; *(src+i)!='\0'; i++)//当src出现'\0'时,代表字符串遍历结束
{
*(des+i)=*(src+i);//给des赋值
}
*(des+i)='\0';//给复制好的des的结尾加上'\0',代表字符串的结束
}
int main()
{
char arr[10]="abcdefg";
char brr[10];
Copy2(brr,arr);//调用函数2
printf("brr是%s",brr);//输出复制好的字符串数组brr
printf("\n");
return 0;
}
の結果
—————————————————————————————
(3)3番目の方法:ポインター演算を使用し、ポインターを移動して配列要素にアクセスします(非常に重要です) )
#include<stdio.h>
void Copy3(char* des, char* src)//利用指针操作,指针自行移动,*******非常非常非常重要********。
{
/*while (*src != '\0')
{
*des = *src;
src++;
des++;
}*/
for (; *src != '\0'; src++, des++)//与上面注释代码二选一即可
{
*des = *src;
}
*des = '\0';
}
int main()
{
char arr[10]="abcdefg";
char brr[10];
Copy3(brr,arr);//调用函数3
printf("brr是%s",brr);//输出复制好的字符串数组brr
printf("\n");
return 0;
}
実行結果
—————————————————————————————
(4)4番目のタイプ:1行のコード(非推奨)
#include<stdio.h>
void Copy4(char* des, char* src)
{
while (*des++ = *src++);//经典代码,不建议使用//
//技巧一:int i = 10; int j = i++;
//技巧二:int i=10;if(i)
}
int main()
{
char arr[10]="abcdefg";
char brr[10];
Copy4(brr,arr);//调用函数4
printf("brr是%s",brr);//输出复制好的字符串数组brr
printf("\n");
return 0;
}
運用結果
—————————————————————————————
4日目2020-12-17木曜日、晴れ
火のように落ち着きがないこともあれば、水のように穏やかなこともあり、象牙の塔に住むように静かなこともあり、人々の海に簡単に混ざり合うこともあります。泣いたり、心を刺したり、震えながら笑ったりしました。時には大げさで、時には傲慢に謙虚になります。これの何が問題になっていますか?病気の名前は愛です。