二つの文字列oneとtwoを引数として、oneをtwoにコピーする関数copy()を作成するという問題で
自分なりに作ってみたのですが動作しません。どこが違っているのか教えていただけないでしょうか?
#include <stdio.h>
int copy( char one[/url] , char two[/url] )
{
unsigned i,j=0;
while (one){
if (one=='\0')
break;
two[j]=one;
i++;
}
return i,j;
}
int main (void){
char three[512];
char four[512];
printf("Input...");
scanf("%s",three);
mystrcopy(three,four);
printf("%s\n",copy(three,four));
return 0;
}
文字列の初歩的な問題で苦戦しています。
Re:文字列の初歩的な問題で苦戦しています。
>copy
はint型の値を返しますので、%sで出力できません。
>mystrcopy(three,four);
が不明ですが、
>printf("%s\n",copy(three,four));
copy(three, four);
printf("%s\n",four);
ちなみに
>if (one=='\0')
>break;
の処理は行われないのでは。
また、twoには文字列の終端を表す'\0'を入れなければ正しく表示できないでしょう。
はint型の値を返しますので、%sで出力できません。
>mystrcopy(three,four);
が不明ですが、
>printf("%s\n",copy(three,four));
copy(three, four);
printf("%s\n",four);
ちなみに
>if (one=='\0')
>break;
の処理は行われないのでは。
また、twoには文字列の終端を表す'\0'を入れなければ正しく表示できないでしょう。
Re:文字列の初歩的な問題で苦戦しています。
返信ありがとうございます。
>mystrcopy(three,four);
は修正前の誤字です。くだらないミスで混乱させてしまい申し訳ありません。
返信の内容をふまえて考えられるだけ作ってみたのですが
#include <stdio.h>
int copy( char one[/url] , char two[/url] )
{
unsigned i,j=0;
while (one){
two[j]=one;
i++;
if (one=='\0')
two[j]='\0';
break;
}
return i,j;
}
int main (void){
char three[512];
char four[512];
printf("Input...");
scanf("%s",three);
copy(three,four);
printf("%s\n",four);
return 0;
}
このプログラムを動かしたところ、1文字しか値が返ってきません。
原因はBlueさんが書いてくださった、
>if (one=='\0')
>break;
>の処理は行われないのでは。
の中にあるような気がして色々と試したのですがどうにもうまく行きません。
僭越ながらもう一度ヒントを頂けないでしょうか。
>mystrcopy(three,four);
は修正前の誤字です。くだらないミスで混乱させてしまい申し訳ありません。
返信の内容をふまえて考えられるだけ作ってみたのですが
#include <stdio.h>
int copy( char one[/url] , char two[/url] )
{
unsigned i,j=0;
while (one){
two[j]=one;
i++;
if (one=='\0')
two[j]='\0';
break;
}
return i,j;
}
int main (void){
char three[512];
char four[512];
printf("Input...");
scanf("%s",three);
copy(three,four);
printf("%s\n",four);
return 0;
}
このプログラムを動かしたところ、1文字しか値が返ってきません。
原因はBlueさんが書いてくださった、
>if (one=='\0')
>break;
>の処理は行われないのでは。
の中にあるような気がして色々と試したのですがどうにもうまく行きません。
僭越ながらもう一度ヒントを頂けないでしょうか。
Re:文字列の初歩的な問題で苦戦しています。
> unsigned i,j=0;
iが初期化されてないですよ。
jの使い道は?
unsigned i=0;
だけでいい。
> two[j]=one;
jはインクリメントされていないので常に0。
(と言うかjはいらない。)
two=one;
> if (one=='\0')
> two[j]='\0';
> break;
ifの後を{}に入れないと、1行しか実行されませんよ。
つまり、break;は常に実行されるので、ループからすぐ抜ける。
1文字しかコピーされなくて当然ですね。
> return i,j;
何を意図しての戻り値なのかわかりません。
コピーした文字数('\0'除く)なら、
return i-1;
でしょうか。
コピーしない(0文字)場合の処理もいりますが。
もう少し入門書などで構文などを勉強することをお勧めします。
iが初期化されてないですよ。
jの使い道は?
unsigned i=0;
だけでいい。
> two[j]=one;
jはインクリメントされていないので常に0。
(と言うかjはいらない。)
two=one;
> if (one=='\0')
> two[j]='\0';
> break;
ifの後を{}に入れないと、1行しか実行されませんよ。
つまり、break;は常に実行されるので、ループからすぐ抜ける。
1文字しかコピーされなくて当然ですね。
> return i,j;
何を意図しての戻り値なのかわかりません。
コピーした文字数('\0'除く)なら、
return i-1;
でしょうか。
コピーしない(0文字)場合の処理もいりますが。
もう少し入門書などで構文などを勉強することをお勧めします。
Re:文字列の初歩的な問題で苦戦しています。
通りすがりさん、返信有り難うございました。
返信して下さった皆様のおかげでようやく形になりました。
単なる勉強不足でのミスをなくすよう心掛けます。
返信して下さった皆様のおかげでようやく形になりました。
単なる勉強不足でのミスをなくすよう心掛けます。