文字列からスペースを削除したいプログラムがあります。エレガントな方法を見つけたかったので、フォーラムで次のコードを見つけました(読みやすくするために少し変更しました) :
char* line_remove_spaces (char* line)
{
char *non_spaced = line;
int i;
int j = 0;
for (i = 0; i <= strlen(line); i++)
{
if ( line[i] != ' ' )
{
non_spaced[j] = line[i];
j++;
}
}
return non_spaced;
}
ご覧のとおり、この関数は文字列を受け取り、同じ割り当てられたメモリ空間を使用して、スペースのない文字のみを選択します。できます!
とにかく、ウィキペディアによると、C の文字列は「ヌル終了文字列」です。私はいつもこのように考えていて、すべてが良かったです。しかし問題は、文字列の最後に「ヌル文字」を入れていないことnon_spaced
です。そして、どういうわけか、コンパイラは、「non_spaced」文字列によって変更された最後の文字で終了することを認識しています。それはどのように知っていますか?