![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?8acaa2e)
No.9ベストアンサー
- 回答日時:
コードを拝見しました。
2点程問題があるようです。(1) read() の fd に相当する変数名が sock_ipadrc となっていますが、ソケットの場合、ファイルと違って必ず sizeof(Buf) 分読めるとは限りませんので(読める場合もあるので、コードは正しいと思い込まないようにしてください))、sizeof(Buf) に満たなかった場合、再度読み込むというような処理が必要です。
(2) で、Buf に sizeof(Buf) 分読み込めたとして、以下のようにすれば strncmp() を使えば、最後の '?0' を気にしなくても大丈夫です。
if( !strncmp( "GETADR", Buf, strlen( "GETADR" ) ) {
...
}
No.8
- 回答日時:
質問者様の質問の範疇からは外れてしまいますが…
No.7様が提示されたコードは、質問者様の想定している状況では恐らく動きますが、
実際のプログラム中に組み込むにはかなり大きな問題を含んでいます。
1.sizeof(Buf)分のデータを読み込むとBuf[sizeof(Buf)]に0を書き込むことになり、
他のメモリ領域を破壊します。
2.readがエラー終了した場合、Buf[-1]に書き込むことになり
他のメモリ領域を破壊します。
なお、lenの値による分岐を設ければ他のメモリ領域破壊は回避できますが
1はBufを全て使い切り、?0を入れる領域が無くなります。
そのため、strcmp以外のライブラリ関数を使ったり、
バッファを他の領域にコピーし直すような対処が必要となります。
No.6
- 回答日時:
No.1のお礼からするとBufの値をデバッガで確認していますか?
Buf[6]が何になっているか確認ください。
これが'\0'でなければ文字列は等しくないです。
ソケット(?)から読み込んで終端文字('\0')まで読み込んでいる可能性は高くないと考えます。
あと一般論ですが、readの返値は変数に取ってチェックした方が良いと思いますよ。
No.4
- 回答日時:
この辺をチェックすればよいかと。
・Bufはread前にnull初期化されているか
readは読んだデータの最後にnullを付けません。
つまり、strcmpはBufをnullが出てくるまでBufを評価し続けます。
・Buf内のデータがunicode文字列だったりしないか
・readの返り値を見て正しくread出来ているかをチェック
エラーが起こっているようならerrnoやperrorで調べる
No.3
- 回答日時:
readした文字列の終端に改行があるのでは?
read()の戻り値がBufに読み込まれた文字列長なので、それで確認してみてください。
文字列長が間違いないとしたら、一文字ずつループして比較してみるしかないですね。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# いまc言語の標準ライブラリ文字列を勉強しているのですがいまいちわかりません。 strcmpとmemc 5 2023/07/04 15:34
- その他(プログラミング・Web制作) awkの文字列比較はPOSIXロケールまたはCロケールにおいてバイナリ値の比較に使えるか gawkな 1 2023/04/22 09:21
- C言語・C++・C# #include <stdio.h>int main(void) { int buf[100] = 6 2022/11/01 22:45
- Visual Basic(VBA) このマクロの説明文を教えてほしいです。 1 2023/01/12 09:17
- Excel(エクセル) エクセルで2つの表を比較して、文字列が同じだが、その行のある値が違うものを抽出したい 1 2022/10/06 21:48
- Excel(エクセル) エクセルの日付から年末尾2桁と月を1月をA~Lに変換したい 3 2022/08/08 10:32
- Visual Basic(VBA) 違う文字のみ色を塗る方法がわかりません。。 G列とH列のに文字が入っています。 例えばG5とH5の文 3 2022/06/03 17:13
- Visual Basic(VBA) フォルダの場所を可変にしたいです(マクロ) 4 2023/05/11 10:00
- C言語・C++・C# C言語の質問です。 以下の命令を実行するプログラムを作りました ①文字列aとbの長さを表示 ②aとb 1 2022/04/29 15:35
- Visual Basic(VBA) オブジェクトが見つかりません 1 2023/06/24 19:43
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
EXCELで=より左の文字を一括で...
-
エクセルでアルファベットか数...
-
文字列からタブコードを取り除...
-
VBAでの Replace関数で、ワイル...
-
エクセルで文字列をtxtファイル...
-
Left関数とRight関数を合わせた...
-
Excelで指数表現しないようにす...
-
■文字コード判定■
-
Excelで3E8を3.00E+8にしない方...
-
VBA2005 16進を2桁で表示したい。
-
同一セル内に関数と文字列を同...
-
アクセスで特定の数字以外(複...
-
エクセル 数値データを桁をそ...
-
ダブルコーテーションでアンド...
-
Msgboxの×が押されたとき
-
【Excel VBA】複数ある特定の文...
-
VBの「As String * 128」とは?
-
エクセルでセル内の文字列の最...
-
MS SQLServer のSQLで文字列の...
-
16進数を10進数に簡単に変換す...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルでアルファベットか数...
-
EXCELで=より左の文字を一括で...
-
VBAでの Replace関数で、ワイル...
-
Excelで指数表現しないようにす...
-
文字列からタブコードを取り除...
-
Excelで3E8を3.00E+8にしない方...
-
エクセルで文字列をtxtファイル...
-
エクセルで文字列の最大値を抽...
-
VBA2005 16進を2桁で表示したい。
-
同一セル内に関数と文字列を同...
-
Left関数とRight関数を合わせた...
-
VBの「As String * 128」とは?
-
Msgboxの×が押されたとき
-
【Excel VBA】複数ある特定の文...
-
MS SQLServer のSQLで文字列の...
-
アクセスで特定の数字以外(複...
-
エクセルでセル内の文字列の最...
-
ORCLEでの小数の表示方法の変更...
-
変数内に入った文字列の結合 UWSC
-
ACCESSのSQLでのカンマ’認識に...
おすすめ情報