掲示板利用宣言

 次のフォームをすべてチェックしてからご利用ください。

 私は

 題名と投稿者名は具体的に書きます。
 課題の丸投げはしません。
 ソースの添付は「HTML変換ツール」で字下げします。
 返信の引用は最小限にします。
 環境(OSとコンパイラ)や症状は具体的に詳しく書きます。
 返信の付いた投稿は削除しません。
 マルチポスト(多重投稿)はしません。

掲示板2

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

No.26776

ファイル
投稿者---中京(2006/05/07 21:09:38)


  while((fgets(temp, MAX - 1, fp1)) != NULL){
    sp = strstr(temp, argv[1]);
    if(sp != NULL){
      i =  strlen(argv[1]);
     while(i != 0){
        *sp = *argv[2];
        sp++;
        i--;
        argv[2]++;
     }
    }
    printf("%s", temp);
  }

  return 0;
}


かなりコードを省略しています。
ポインタsp
MAX256
argv[1] hoge
argv[2] HOGE
temp 格納先

ファイル中のhogeをHOGEに書き換えて配列tempに格納するようにしたいのですが、どうもうまくいきません。どこがおかしいでしょうか?
ご指摘をお願いいたします。


この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:ファイル 26777 RAPT 2006/05/07 21:56:28


No.26777

Re:ファイル
投稿者---RAPT(2006/05/07 21:56:28)


> どうもうまくいきません
何が「どう」うまくいかない?

どんなデータを与え、どんな結果を期待したら、どうなった。
そこを書かないと意味が通じません。

で、1回こっきりの実行なら置き換えはえきるはずですが、
提示のコードでは2回目以降で破綻するでしょう。
# ま、ポインタの理解が甘いとかその辺の疑いが強いですが。

あと、argv[1] と argv[2] の長さが等しくないと、上書きは
正しく行なえませんし、逆に長さが等しいのであれば、なぜ
strncpy() を使わないのか、が不思議でなりませんが。

//----------[ テストコード ]----------

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

int main( void ){
    const char *argv[] = {"", "hoge", "HOGE"};
    char temp[] = "this is a test code. code name is 'hoge'; over.";
    char* sp = strstr(temp, argv[1]);
#if 0
    if( sp != NULL ){
        strncpy( sp, argv[2], strlen(argv[1]) );
    }
#else
    int i;
    if( sp != NULL ){
        i = strlen( argv[1] );
        while(i != 0){
            *sp = *argv[2];
            sp++;
            i--;
            argv[2]++;
        }
    }
#endif
    puts( temp );

    return 0;
}



この投稿にコメントする

削除パスワード

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