C言語を基礎を学んでいます。
C言語でstrcpy関数を自作していたら、変な現状に出会いました。
whileでchar型変数へ代入すると、代入元の値が消えます。
while分の使い方を省略した書き方から、変えると値は保持されます。
私のwhile文の理解が間違っているようなのですが、どこが間違っているのかわからないです。
アドバイスをいただければ幸いです。
c
1#include <stdio.h> 2 3void istrcpy(char *s1, char *s2) 4{ 5 6 while((*s2++ = *s1++) != '\0'){ 7 } 8 *s2 = '\0'; 9} 10 11int main(void) 12{ 13 char str1[] = "aiueo"; 14 char str2[] = "12345"; 15 16 printf("str1 : %s\n", str1); 17 printf("str2 : %s\n", str2); 18 printf("str1 p : %p\n", &str1); 19 printf("str2 p : %p\n", &str2); 20 21 istrcpy(str1, str2); 22 23 printf("str1 : %s\n", str1); 24 printf("str2 : %s\n", str2); 25 printf("str1 p : %p\n", &str1); 26 printf("str2 p : %p\n", &str2); 27 28 return 0; 29}
実行結果
terminal
1str1 : aiueo 2str2 : 12345 3str1 p : 0x7ffeeee3cb56 4str2 p : 0x7ffeeee3cb50 5str1 : 6str2 : aiueo 7str1 p : 0x7ffeeee3cb56 8str2 p : 0x7ffeeee3cb50
#試したこと
while文について下記の書き換えを行うと元の値は消えないです。
c
1 while (*s != '\0') { 2 *d = *s; 3 d++; 4 s++; 5 }
回答5件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/02/24 10:59
2020/02/24 11:03