strcpyの後のデータセット

[戻る]
ドランク 2003/11/13(木) 15:48:15
くだらない質問で申し訳ありませんがご教授ください。

以下のようなプログラムで、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です。

επιστημη [E-Mail] [HomePage] 2003/11/13(木) 15:51:08
文字列のオシリには終端文字 '\0' がありますから、
n文字を納める配列の大きさは n+1 です。

ドランク 2003/11/13(木) 15:56:16
では、配列を変えなければ回避できませんか?
質問のような構造体の形を変えたくはないのですが・・・

tetrapod 2003/11/13(木) 15:57:40
現状メモリを壊しているわけなので、変えざるを得ないでしょう。
もしくは配列 a に入れる文字数を減らすか、どちらか。

ドランク 2003/11/13(木) 16:17:56
[[解決]]
皆様、ありがとうございました。

構造体を変更します。

yukihiro 2003/11/13(木) 22:45:38
2文字に限定されているんなら
strcpyじゃなくてmemcpyしたらいかが?

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

yukihiro 2003/11/13(木) 22:50:30
あ、そか。
strcpyしたときにbが壊れて困るという話じゃなく、
bに代入したときに文字列としてのaが壊れて困るって話なんですね。
つまりあくまでaは文字列なのだと。

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

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