文字列の初歩的な問題で苦戦しています。

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
YK

文字列の初歩的な問題で苦戦しています。

#1

投稿記事 by YK » 17年前

二つの文字列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;
}

Blue

Re:文字列の初歩的な問題で苦戦しています。

#2

投稿記事 by Blue » 17年前

>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'を入れなければ正しく表示できないでしょう。

YK

Re:文字列の初歩的な問題で苦戦しています。

#3

投稿記事 by YK » 17年前

返信ありがとうございます。
>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:文字列の初歩的な問題で苦戦しています。

#4

投稿記事 by 通りすがり » 17年前

 > 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文字)場合の処理もいりますが。

もう少し入門書などで構文などを勉強することをお勧めします。

YK

Re:文字列の初歩的な問題で苦戦しています。

#5

投稿記事 by YK » 17年前

通りすがりさん、返信有り難うございました。
返信して下さった皆様のおかげでようやく形になりました。

単なる勉強不足でのミスをなくすよう心掛けます。

閉鎖

“C言語何でも質問掲示板” へ戻る