char配列の1文字だけを上書きしたいです – プログラミング – Home

char配列の1文字だけを上書きしたい...
 
通知
すべてクリア

[解決済] char配列の1文字だけを上書きしたいです


Puppy
 Puppy
(@Puppy)
ゲスト
結合: 23年前
投稿: 71
Topic starter  

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
 不良PG
(@不良PG)
ゲスト
結合: 23年前
投稿: 80
 

CString str;
str = 1234567890;
str.SetAt(2,str.GetAt(4));
TRACE(%s\n, str);

これで良いのでは?


返信引用
駄犬
 駄犬
(@駄犬)
ゲスト
結合: 23年前
投稿: 59
 

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


返信引用
Puppy
 Puppy
(@Puppy)
ゲスト
結合: 23年前
投稿: 71
Topic starter  

不良PGさん お返事ありがとうございます。

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

例えば、配列の内容が

123456789012345678901234567890 の時に

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


返信引用
第3水準
 第3水準
(@第3水準)
ゲスト
結合: 23年前
投稿: 17
 

wsprintf(buf + 2, %c, str.GetAt(4));

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

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

に変えても出来ますね。


返信引用
Puppy
 Puppy
(@Puppy)
ゲスト
結合: 23年前
投稿: 71
Topic starter  

あぁ、書いてる間にお返事が。。。

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

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

123456789012345678901234567890 の時に

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

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


返信引用
第3水準
 第3水準
(@第3水準)
ゲスト
結合: 23年前
投稿: 17
 

ニアミス(^^;

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

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

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

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

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

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

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


返信引用
Puppy
 Puppy
(@Puppy)
ゲスト
結合: 23年前
投稿: 71
Topic starter  

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

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

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

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


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました