【C言語】
strchrの戻り値チェクを手抜きするとSegmentation faultする

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

■strchrを使って文字を左から検索

#include <stdio.h>
#include <string.h>
int main(void){//左から検索
    char csv[] = "Jugemu,Jugemu,Goko,no,Surikire" ;

    puts(csv);
    for(char *p = strchr(csv, ','); p != NULL;p = strchr(p+1,',')){
        puts(p);
    }
}

CSV形式(Comma Separated Values)の文字列の中から
カンマ”,”をstrchrで左から検索するサンプルコードです。

➡実行結果

./a.out 
Jugemu,Jugemu,Goko,no,Surikire
,Jugemu,Goko,no,Surikire
,Goko,no,Surikire
,no,Surikire
,Surikire

■戻り値のNULLチェックをしないで異常終了するかもしれない例

#include <stdio.h>
#include <string.h>
int main(void){//返却値のNULLチェックしないで異常終了する例
    char csv[] = "Jugemu,Jugemu,Goko,no,Surikire" ;
    puts(csv);

    char *p = NULL;
    p = strchr(csv,',');    puts(p);
    p = strchr(p+1,',');    puts(p);
    p = strchr(p+1,',');    puts(p);
    p = strchr(p+1,',');    puts(p);
    p = strchr(p+1,',');    puts(p);
}

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

➡筆者の環境下での実行結果

./a.out 
Jugemu,Jugemu,Goko,no,Surikire
,Jugemu,Goko,no,Surikire
,Goko,no,Surikire
,no,Surikire
,Surikire
Segmentation fault (コアダンプ)

■strrchrを使って文字を右から検索

#include <stdio.h>
#include <string.h>
int main(void){ //右から検索
    char csv[] = "Jugemu,Jugemu,Goko,no,Surikire" ;
    puts(csv);
    for(char *p = strrchr(csv, ','); p != NULL;p = strrchr(csv,',')){
        puts(p);
        *p = '\0';//検索済みを元データから削除
    }
}

CSV形式(Comma Separated Values)の文字列の中から
カンマ”,”をstrrchrでから検索するサンプルコードです。

➡実行結果

./a.out 
Jugemu,Jugemu,Goko,no,Surikire
,Surikire
,no
,Goko
,Jugemu

参考:

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