char配列の1文字だけを上書きしたいです

[戻る]
Puppy 2002/05/10(金) 18:20:12
Puppyです。こんにちは。お世話になっています。MFCを使っています。
文字キャラクタで埋まったchar型の配列の1キャラクタだけ
文字を上書きしたいのですが、どうしたらよいでしょうか?

char buf[11];
ZeroMemory(buf, sizeof(buf));
CString str;
str = "1234567890";
wsprintf(buf, "%s", str);
TRACE("%s\n", buf);
wsprintf(buf + 2, "%c", str.GetAt(4));
TRACE("%s\n", buf);

とするとアウトプットウィンドには
1234567890
125
と出ちゃいます。(涙)多分\0も上書きされてしまうからだと思うんですが、本当は
1234567890
1254567890
 ^^^
と出力されるようにしたいです。
どうしたらよいでしょうか?できたらいろいろな回答(方法)が知りたいです。
よろしくお願いします。m(..)mぺこり

不良PG [E-Mail] 2002/05/10(金) 18:32:53
CString str;
str = "1234567890";
str.SetAt(2,str.GetAt(4));
TRACE("%s\n", str);

これで良いのでは?

駄犬 [E-Mail] 2002/05/10(金) 18:42:08
buf[2] = str.GetAt(4);

Puppy 2002/05/10(金) 18:44:08
不良PGさん お返事ありがとうございます。

実際には長いchar型の配列があるんですぅ。
その場合に1文字だけ上書きしたり、3文字(続けて)上書きしたりする方法は
ありますか?

例えば、配列の内容が

123456789012345678901234567890 の時に

123456789012345677901234567890 のように1文字だけ上書きする方法と
                ^^^
123456789012345333331234567890 のように5文字だけ上書きする方法が
               ^^^^^
が知りたいです。お願いしますぅ。m(..)mペコリ
残業になっちゃいました。(涙)

第3水準 2002/05/10(金) 18:44:23
wsprintf(buf + 2, "%c", str.GetAt(4));
を

buf[2] = str.GetAt(4);
や
*(buf+2) = str.GetAt(4);

に変えても出来ますね。

Puppy 2002/05/10(金) 18:50:41
あぁ、書いてる間にお返事が。。。

駄犬さん、第3水準さん お返事ありがとうございます。

1文字の上書きはうまくいきました。
文字列の上書きをする方法はありますか?
も一度書きます。例えば、配列の内容が

123456789012345678901234567890 の時に

123456789012345333331234567890 のように5文字だけ上書きする方法が
               ^^^^^
が知りたいです。(CString::GetAt()を5回連続はしたくないですぅ。)

お願いしますぅ。m(..)mペコリ

第3水準 2002/05/10(金) 18:58:29
ニアミス(^^;

>その場合に1文字だけ上書きしたり、3文字(続けて)上書きしたりする方法は
>ありますか?
>
>例えば、配列の内容が
>
>123456789012345678901234567890 の時に
>
>123456789012345677901234567890 のように1文字だけ上書きする方法と
>                ^^^
>123456789012345333331234567890 のように5文字だけ上書きする方法が
>               ^^^^^
>が知りたいです。

同一文字を複数回上書きするなら
char *cp;
int i;

cp = 上書きする先頭アドレス;
for(i=0;i<上書きする回数;i++){
  *cp++ = 上書きする文字;
}

で上書きできると思います。

文字列の途中を他の文字列で書き換える場合なら

strncpy(書き換える先頭アドレス,上書きする文字列の先頭アドレス,上書きする文字列長);

で上書きできると思います。

Puppy 2002/05/10(金) 19:09:42
[[解決]]
第3水準さーん お返事ありがとうございますぅ。

>strncpy(書き換える先頭アドレス,上書きする文字列の先頭アドレス,上書きする文字列
長);

ヘルプを見たら、ばっちりできそうですぅ。(^-^;
これで帰れそうです。ありがとうございました。

皆様 ありがとうございましたぁ。m(..)mペコリ

古いスレッドには追加発言できません。