Cで同等のバージョンの perl のchomp()
関数を実装しようとしていますが、引数として渡された文字列リテラルがセグメンテーション違反を引き起こすコーナー ケースに遭遇しました (当然のことです)。
例chomp("some literal string\n");
C99 には、関数に文字列リテラルが渡されたかどうかを検出するための定義済みの方法があり、return
NUL を試行せずに実行できますか?
char* chomp(char *s)
{
char *temp = s;
if (s && *s)
{
s += strlen(s) - 1;
if (*s == '\n')
{
*s = '\0';
}
}
return temp;
}