
固定文字列の長さはどのように書いたらよいのでしょう?
"====END====" の文字列長は11ですので、
strlen(ENDMARK); と記述すると、実行時に計算して11を得るコードが生成されますよね。
これを、コンパイル時に数字11に置き換えてくれる記載方法が思いつきません。
つまり、以下のコードでは、strlen(ENDMARK)なので、
実行時に文字列長を計算するコード
になってしまいます。
これを、コンパイル時に計算して定数11に置き換えるようなコードを書きたいのです。
strlen(ENDMARK)と記載した部分を、どのように書いたらよいのでしょうか?
単純に11に置き換えてしまうと、#define ENDMARK "====END===="を修正した場合に整合性が取れなくなることがあり避けたいのです。
よろしくお願いします。
#define ENDMARK "====END===="
gets(buf);
if( strncmp(buf, ENDMARK, strlen(ENDMARK)) == 0 ) {
:

No.2ベストアンサー
- 回答日時:
sizeof(ENDMARK) とすると1バイト大きい12が得られます。
11が望みなので、
if( strncmp(buf, ENDMARK, sizeof(ENDMARK)-1) == 0 ) { とするか
#define ENDMARKLEN (sizeof(ENDMARK)-1) として
if( strncmp(buf, ENDMARK, ENDMARKLEN) == 0 ) { とするか
のどちらかでよいかと。
>if( strncmp(buf, ENDMARK, sizeof(ENDMARK)-1) == 0 ) { とするか
ありがとうございます、そのようにしました。
sizeofはメモリ使用量を計るものなので、結果、文字数も判るわけですね。
判ってしまえば、当たり前ですね。
ありがとうございました。
No.1
- 回答日時:
そうしたい理由が疑問ですが、
sizeof (ENDMARK) - 1
で、コンパイル時に定数へ変換されます。
-1 は文字列の最後には NULL があるためです。
sizeof (ENDMARK) - 1
なるほど。
ありがとうございます。
>そうしたい理由が疑問ですが、
実行時に計算するのが「美しくない」と感じるからです。
富豪的プログラミングができない貧乏性なので・・・
http://www.pitecan.com/fugo.html
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) VBAで “:” を含むセルの特定 2 2023/05/11 16:30
- C言語・C++・C# c言語 プログラムのエラー 1 2023/02/11 20:31
- Visual Basic(VBA) Vbaで数式をポーランド記法に変換するコードを作って実行しようとするとフリーズします。 1 2022/05/24 17:53
- Access(アクセス) アクセス テーブルの空白を変数に置換するボタンが作りたい 4 2022/07/08 11:19
- Visual Basic(VBA) VBA 改行コードの取り方 1 2022/03/22 14:14
- その他(コンピューター・テクノロジー) 【Tableau Desktop】文字列から8桁の数字を日付型(yyyyMMdd)として取得 1 2023/07/31 10:17
- Visual Basic(VBA) EXCEL VBA 単語置き換え について質問です ブック名 ぶぶぶ シート名 ししし セル V3〜 3 2023/03/08 01:41
- Excel(エクセル) B列に文字がはいったらA列に数字が入るマクロードを完成させたい 4 2023/04/21 01:58
- Visual Basic(VBA) コード名シートA列と集計シートA列のコードが一致したら、コード名シートA5からk12の範囲をコピーし 1 2022/08/29 23:46
- Visual Basic(VBA) Excel VBAでAA(BBB) → BBB.AA に置換したい 2 2022/10/30 13:59
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
アプリケーションのDLLファイル...
-
コンパイル時に「out of memory...
-
ビープ音が鳴りません・・・
-
WindowsでのC と LinuxでのC...
-
実行後にコンパイルに失敗しま...
-
64ビットのlinuxで32ビットメモ...
-
<unistd.h>をVisualStudioでつ...
-
C言語で作ったらWindowsでもMac...
-
python エラー
-
DLLファイルの逆コンパイラにつ...
-
Excelのエラーで困ってます。
-
エクセルのエラーメッセージ「4...
-
sys/time.hのインクルードがで...
-
プロシージャエントリポイント ...
-
マクロ コンパイルがグレーバック
-
ILSpyで、デコンパイルできない。
-
Excel VBAのデバッグ
-
cudaのnvccはmingwやgccでも使...
-
C++でデスクトップGUIアプリ開...
-
PathIsDirectoryを使って
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
<unistd.h>をVisualStudioでつ...
-
アプリケーションのDLLファイル...
-
実行後にコンパイルに失敗しま...
-
math.hに含まれる関数が使えない
-
シリアル通信の受信待ちについて
-
ビープ音が鳴りません・・・
-
C#で char型とstring型の比較で...
-
c言語です コンパイルした時に...
-
共有ライブラリの内容確認について
-
すべてのリビルド: 0 正常、 0 ...
-
64ビットのlinuxで32ビットメモ...
-
C言語で作ったらWindowsでもMac...
-
MS-BASICの逆コンパイルについて
-
<math.h>ヘッダを入力している...
-
ヘッダーファイル『windows.h』...
-
プレコンパイルの意味を教えて...
-
Verilog_HDLでのdefineとifdef
-
[COBOL] ソースの復帰
-
gcc バージョン違いによるコン...
-
同じEXE・同じファイルで解析結...
おすすめ情報