シルメラ プロジェクト | thilmera project ...       Site Viewer / Auto Update / Version
Windows汎用 多機能システムモニター - あなたの七つ道具
- Download (Japanese) -
Vector 窓の杜
フリーソフト100
- Download (English) -
Softpedia DIGITAL DIGEST
FileCroco MajorGeeks.Com
- Donation -
寄付 - paypal.me
thilmera7s ライセンス
*先日追加されたモニターオフキープ機能は、「モニターオフキープ」を実行しない限りPCに影響を与えることは一切関係ありません。

エンゲージメント
開発録
レビュー
PC周辺機器レビュー / HDD難民
軽さこそ命
ビット逆転の早いコードを目指す
並列処理は軽くなるわけではない
書き方を変えても速くならないコード例
std::vectorのpush_backはとても重い
悩みの種
Visual Studioでファンクションキーが動かなくなった
COMODOジャパンのデジタル署名の実状
strcmpに両方空文字列をいれると0以外を返す
Windows Defender誤検出の原因コード例
雷と停電
  アマゾン情報 - こちらのリンクを通して何らかをご購入頂くことで当サイトの運営、開発を応援頂けます
strcmpに両方空文字列をいれると0以外を返す (2019/03/26)



 こんな内容で、新しい文字列がきたら内容を実行する的な分岐を作ったとする。

	static char old_str[261] = {0};

if( strcmp( old_str, new_str ) != 0 ) {
strcpy_s( old_str, 261, new_str );
//以下処理を実行
}

 こうするとnew_strがなにか文字が入っていたら、new_strが前回と違う場合のみ実行してくれる。うんうん意図通り。

 だが!

 new_strが "" つまりnew_strの一文字目から終端のnull文字だった場合、old_strとnew_strが両方 "" になる。
 こうなるとどっちも "" なんだから当然答えは 0 =等しい だよねーと思っていたら、なんとこれ0以外を返すのである。なんで?

 ドキュメント読めよって話かもしれないが、ループ内でこれが起こるとえらいこっちゃなので、こうすることで回避した。


	static char old_str[261] = {0};

if( ( old_str[0] != '\0' || new_str[0] != '\0' )
&& strcmp( old_str, new_str ) != 0 ) {
strcpy_s( old_str, 261, new_str );
//以下処理を実行
}

 これでおとなしくなる。
 ちなみにnew_str自体にNULLが入る可能性がある場合はそれのハンドリングもいる。
 wcscmpでもこの現象は同じ。




Copyright © 弦生ささと(Gakuto Matsumura) All Rights Reserved.