【C言語】
strchrの戻り値
NULLを無視すると
Segmentation fault発生

戻り値のNULLチェック必須 strchr()で Segmentation fault

■戻り値のNULLチェックをしていない

#include <stdio.h>
#include<string.h>
int main(void){
    char str[] = "abc:def";
	char *cp1 = strchr(str, ':');
    if(cp1[0] == ':') {
		puts(":が有った");
	} else {
		puts(":は無かった");
	}

    char *cp2 = strchr(str, ',');
    if(cp2[0] == ',') {
		puts(",が有った");
	} else {
		puts(",は無かった");
	}
}

このプログラムは戻り値のNULLチェックを
行わず、
いきなりcp1[0],cp2[0]を参照しています。

カンマが見つからないと
NULLポインタ間接参照が発生して
異常終了する可能性があります。


➡筆者環境下の実行結果

./a.out
:が有った
Segmentation fault

■戻り値のNULLチェックをする

#include <stdio.h>
#include<string.h>
int main(void){
    char str[] = "abc:def";
	char 	*cp1 = strchr(str, ':');
	if(cp1 != NULL) {
		puts(":が有った");
	} else {
		puts(":は無かった");
	}

	char *cp2 = strchr(str, ',');
	if(cp2 != NULL) {
		puts(",が有った");
	} else {
		puts(",は無かった");
	}
}

実務では必ずNULLチェックをしましょう。
対象が csv 形式で必ずカンマがあるはずでも
異常な入力に備えましょう。


➡実行結果

./a.out
:が有った
,は無かった

参考:

ERR33-C. 標準ライブラリ関数のエラーを検出し対処する