###質問したいこと
0. C言語の構造体定義において、メンバが文字列である場合、文字配列の長さは「必要な文字の長さ+1」で正しいでしょうか。
0. また、文字列の定義において、以下の"s1"のような定義が正しい場合はあり得るでしょうか。
c
1char s1[1]; /* 終端文字が入らないので、この記述はあり得ない? */ 2char s2[2]; /* 文字列として、長さ1の場合、この書き方が正しい? */ 3char s3; /* 文字であればこれでもOKのはず */
###質問の背景と詳細
C言語については完全な初心者ですが、次のプロジェクトでC言語を使用することになったので、設計書等を読みつつ、勉強中の身です。
プロジェクト自体は、詳細設計が終わり、来週から実装に取り掛かる、という状況ですが、構造体定義の設計書がほぼプログラムそのままでした。
その設計書を読んでいると、以下のような記述が散見されました。
c
1struct person { 2 char s_date[8]; /* yyyyMMdd */ 3 char s_sex[1]; /* M or F */ 4};
まず、s_dateについてですが、この日付は「yyyyMMdd」の形式とします。
8桁なので一見合っているのですが、C言語の場合、終端文字を考慮して、「必要な文字の長さ+1」にする必要があると思っています。
また、s_sexについてですが、これもs_dateの場合と同じです。そもそも、終端文字を考慮するなら、「文字配列を定義しているのに長さが1」という状況は絶対にありえない、と考えています。
よって、正しくは以下のような記述になると思っています。
c
1struct person { 2 char s_date[9]; /* yyyyMMdd */ 3 char s_sex[2]; /* M or F */ 4};
かなり初歩的な内容ですが、私の考えは正しいのでしょうか…。
設計書には上記の誤り(?)が非常に多く、また、プロジェクトにはC言語に精通した人が多く居るらしいので、私の考えの方が間違っている可能性が高いと思い、こちらで質問させて頂きました。
ちなみに、次のプロジェクトのメンバとは距離的にも心理的にも遠く、質問がし辛い状況です。
よろしくお願いします。
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/05/09 08:26
2017/05/09 08:46 編集