←検索窓の楽しみ方
  ショッピングモール  掲示板ランキング


【掲示板ご利用上の注意】

 ※題名は具体的に!
 ※学校の課題の丸投げ禁止!
 ※ソースの添付は「HTML変換ツール」で字下げ!
 ※返信の引用は最小限に!
 ※環境(OSとコンパイラ)や症状は具体的に詳しく!
 ※マルチポスト(多重投稿)は慎んで!

 詳しくはこちら



 本当はこんなに大きく書きたくはないのですが、なかなか守っていただけなくて…。
 守ってくださいね。お願いします。(by管理人)

C言語ソース⇒HTML形式ツール   掲示板1こちら


管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    記事検索    ログ    タグ一覧

No.3673

文字のコピー
投稿者---リード(2005/04/22 09:13:01)


はじめまして。

以下のようなプログラムを作ったのですが、実行すると
mojiretu
mojiretuフフフフフフフフフフフフmojiretu
のようになってうまくいきません。

やりたいことは、文字をまるまるコピーしたいのです。
よろしくおねがいします。

#include <stdio.h>

int main()
{
    int i, j;
    char x[20]="mojiretu";
    char x2[20];

    i = 8;
    for(j=0;j<i;j++){
        x2[j]=x[j];
    }
    printf("%s\n",x);
    printf("%s\n",x2);

    return(0);
}



この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:文字のコピー 3674 Blue 2005/04/22 09:39:39
<子記事> Re:文字のコピー 3675 REE 2005/04/22 09:54:28


No.3674

Re:文字のコピー
投稿者---Blue(2005/04/22 09:39:39)


>mojiretuフフフフフフフフフフフフmojiretu
文字列の終端文字である'\0'入れてあげましょう。

また格納するまえに明示的に'\0'で初期化することもしたほうがベターです。

char x2[ 20 ] = { 0 };

または

char x2[ 20 ];
memset( x2, '\0', sizeof( x2 ) );




この投稿にコメントする

削除パスワード

No.3676

Re:文字のコピー
投稿者---Blue(2005/04/22 10:10:08)


後々のことを考えて
>i = 8;
の決め打ちをやめて

以下のように変更するとよいでしょう。

#include <stdio.h>

int main( void )
{
    int  i;
    char x[ 20 ] = "mojiretu";
    char x2[ 20 ] = "";

    for ( i = 0; x[ i ] != '\0'; i++ )
    {
        x2[ i ] = x[ i ];
    }
    x2[ i ] = '\0';
    
    printf( "%s\n", x );
    printf( "%s\n", x2 );
    
    return 0;
}

それとREEさんもおっしゃていますが、
string.hの strcpy,strlenについても調べられるといいでしょう。
(他にも文字列操作に便利な関数もありますし。)



この投稿にコメントする

削除パスワード

No.3675

Re:文字のコピー
投稿者---REE(2005/04/22 09:54:28)


>以下のようなプログラムを作ったのですが、実行すると
>mojiretu
>mojiretuフフフフフフフフフフフフmojiretu
>のようになってうまくいきません。
>
>やりたいことは、文字をまるまるコピーしたいのです。
>よろしくおねがいします。

iを9(文字数+1)、もしくは20(配列サイズ)にすればよいです。
strcpy関数を使うことも出来ます。



この投稿にコメントする

削除パスワード

No.3677

Re:文字のコピー
投稿者---リード(2005/04/22 11:27:04)


REEさん、Blueさんありがとうございました。
i=8をi=9に変更したり、Blueさんの方法でやってみたらうまくいきました。
strcpyを調べてみて以下のように書き直してみました。
使い方間違ってないですか?結果はうまくいったのですけど。。

#include <stdio.h>
#include <string.h>

int main()
{
    char x[20]="mojiretu";
    char x2[20] = {0};

    strcpy(x2,x);
    printf("%s\n",x);
    printf("%s\n",x2);

    return(0);
}




この投稿にコメントする

削除パスワード

No.3678

Re:文字のコピー
投稿者---RiSK(2005/04/22 20:05:50)


>strcpyを調べてみて以下のように書き直してみました。
>使い方間違ってないですか?結果はうまくいったのですけど。。

OK です。


が,少しだけ。

> int main()

規格にあわせて int main(void) にしておきましょう。

> char x2[20] = {0};

問題ありませんが,strcpy で埋めることが分かっているので
初期化は不要です。


この投稿にコメントする

削除パスワード

No.3679

Re:文字のコピー
投稿者---KING・王(2005/04/22 23:38:06)


>問題ありませんが,strcpy で埋めることが分かっているので
>初期化は不要です。

ついでに、よく初心者が間違いやすいので補足を。

strcpyの場合は、初期化が不要ですが、strcatの場合は、初期化していないと、
動作が不定になります。
正しく動作できているように見えて、場合によっては、全然思うように動作しないというように。


この投稿にコメントする

削除パスワード

No.3684

Re:文字のコピー
投稿者---リード(2005/04/23 23:36:16)


皆さん。たくさんのアドバイスありがとうございました。
今後、もっと良いプログラムを作れるようにがんばっていきたいと思います。
また、わからないことがあったらよろしくお願いします。


この投稿にコメントする

削除パスワード

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    記事検索    ログ    タグ一覧




掲示板提供:Real Integrity