strcpyの後のデータセット – プログラミング – Home

strcpyの後のデータセット
 
通知
すべてクリア

[解決済] strcpyの後のデータセット


ドランク
 ドランク
(@ドランク)
ゲスト
結合: 22年前
投稿: 3
Topic starter  

くだらない質問で申し訳ありませんがご教授ください。

以下のようなプログラムで、stycpyでc.aに
文字列をセットします。
その後、c.bにデータをセットすると、c.aの
AAの後にゴミのようなデータが入ってしまうのですが、
これを回避する方法はないでしょうか?

main() {

struct {
char a[2] ;
short b ;
} c ;

strycpy( c.a, AA ) ;
c.b = 1 ;
}

環境は、Windows2000、VC++6.0です。


引用未解決
トピックタグ
επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 22年前
投稿: 600
 

文字列のオシリには終端文字 '\0' がありますから、
n文字を納める配列の大きさは n+1 です。


返信引用
ドランク
 ドランク
(@ドランク)
ゲスト
結合: 22年前
投稿: 3
Topic starter  

では、配列を変えなければ回避できませんか?
質問のような構造体の形を変えたくはないのですが・・・


返信引用
tetrapod
 tetrapod
(@tetrapod)
ゲスト
結合: 22年前
投稿: 830
 

現状メモリを壊しているわけなので、変えざるを得ないでしょう。
もしくは配列 a に入れる文字数を減らすか、どちらか。


返信引用
ドランク
 ドランク
(@ドランク)
ゲスト
結合: 22年前
投稿: 3
Topic starter  

皆様、ありがとうございました。

構造体を変更します。


返信引用
yukihiro
 yukihiro
(@yukihiro)
ゲスト
結合: 23年前
投稿: 24
 

2文字に限定されているんなら
strcpyじゃなくてmemcpyしたらいかが?

もちろんその後aをゼロ終端文字列として扱うことはできませんが。


返信引用
yukihiro
 yukihiro
(@yukihiro)
ゲスト
結合: 23年前
投稿: 24
 

あ、そか。
strcpyしたときにbが壊れて困るという話じゃなく、
bに代入したときに文字列としてのaが壊れて困るって話なんですね。
つまりあくまでaは文字列なのだと。

上の私の発言は無視してください。
スレ汚し失礼>ALL


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

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