• ベストアンサー

教えてください

こんにちは。質問させて下さい。 以前質問したのですが、うまくいかず悩んでいます。 -------------------------------------------------------- char line[512]; char *ptmp,*ptmp2; FILE *fpi,*fpo; fpi=fopen("moto.txt","r"); fpo=fopen("saki.txt","w"); while (getline(line, sizeof(line), fpi) == EXIT_OK) { ptmp=line; for(ptmp2=ptmp;*ptmp2;ptmp2++){ if(!strncmp(ptmp2, "$http://", 8)){ strncpy(ptmp2, "http://", 7); } } fputs(line,fpo); fputs("\n",fpo); } -------------------------------------------------------- moto.txtを読込み、saki.txtに書き込む処理です。 読込んだ行に"$http://"が存在した場合は、"$http://"に変更する処理を 作成しているですが、うまくいきません。 読込んだ行--------------------------- aaaa$http://aaaa.co.jp/bbbbb$cccc$ 本当は以下の様にしたい--------------- aaaahttp://aaaa.co.jp/bbbbb$cccc$ 結果はこうなってしまう--------------- aaaahttp:///aaaa.co.jp/bbbbb$cccc$ 恐らく"strncpy(ptmp2, "http://", 7)の部分がいけないとおもうのですが・・・ アドバイス宜しくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.5

> aaaahttp://aaaa.co.jp/bbbbb$cccc$$ > と文末に"$"が表示されてしまいます。 末端の'\0'がズレていません。 ズラしの回数が一回足りません。

toopeaan
質問者

お礼

すみません、できました。 ご迷惑お掛けしました!!

toopeaan
質問者

補足

再びの回答有難うございます。 >末端の'\0'がズレていません。 >ズラしの回数が一回足りません 末尾以外は正常なのですが、 i=7とj=8の時点でずれていると思うのですが、どうしてでしょうか? 例) $|h|t|t|p|:|/|/|w|w|w|.|a|a|a|.|c|o|.|j|p|/|\0| h|t|t|p|:|/|/|w|w|w|.|a|a|a|.|c|o|.|j|p|/|\0| すみません、自分なりに考えているのですが、 答えがうまく導きだせません。 アドバイスお願い致します。

その他の回答 (4)

  • hogeta
  • ベストアンサー率14% (4/28)
回答No.4

No.2の者ですが、ずらしている「だけ」だからです。 さっきの回答をちょっと使い回せばすぐ解決するはずです。

回答No.3

>> 一つづつ前にずらす処理が抜けています。 > 上記は以下のような記述でいいのでしょうか? そんなのは訊くことではありません。 やってみることです。

  • hogeta
  • ベストアンサー率14% (4/28)
回答No.2

$|h|t|t|p|:|/|/| ← 8バイト ↓ h|t|t|p|:|/|/| ← 7バイト だから、8バイト目の/が残ってしまってます。 単純な方法でも良ければ、strcpyで書き換えた 後に、 int i,j; for(i=7,j=8;*(ptmp2+j)!='\0';i++,j++) *(ptmp2+i)=*(ptmp2+j); とでもすればいいのでは

toopeaan
質問者

補足

早速の回答ありがとうございます。 上記の記述で確かめてみたところ aaaahttp://aaaa.co.jp/bbbbb$cccc$$ と文末に"$"が表示されてしまいます。 i=7, j=8とずらしているのですがどうしてでしょうか? 宜しくお願い致します。

回答No.1

"http://"の後ろに続く部分("aaa.co.jp....")を 一つづつ前にずらす処理が抜けています。

toopeaan
質問者

補足

返信ありがとうございます。 >一つづつ前にずらす処理が抜けています。 上記は以下のような記述でいいのでしょうか? -------------------------- /*ポインタを1つずらして格納*/ *ptmp2 = *(ptmp2 + 1); ---------------------------

関連するQ&A

専門家に質問してみよう