このプログラムはどのように空白を削除しますか?:
int main()
{
char s[]="remove white space";
int i;
for(i=0;s[i];++i)
if(s[i]==' ')
s[i]='\a';
printf("%s",s);
return 0;
}
ここで出力を参照してください
出力:
removewhitespace
空白を削除するのではなく、ほとんどの端末で印刷されないベル文字に置き換えるだけです(代わりに、通常は厄介なビープ音が鳴ります)。
端末には表示されませんが、これらの文字は明らかに標準出力に書き込まれるため、プログラムの出力をファイルにリダイレクトすると、ディスクに書き込まれ、ほとんどのエディターで表示できます。
は非\a
グラフィック文字であり、プログラムは文字列内のすべての空白を\a
非グラフィック文字に置き換えます。
標準からここを参照してください(強調鉱山):
(C99、5.2.2p2)実行文字セット内の非グラフィック文字を表すアルファベットのエスケープ シーケンスは、次のように表示デバイス上でアクションを生成することを目的としています。
\a (アラート)アクティブな位置を変更せずに、可聴または可視のアラートを生成します。
\a
印刷できない文字です-ビープ音を鳴らします。
したがって、スペース文字が(インプレースで)に置き換えられ\a
、文字列がコンソールに送信されるとprintf()
、単一のスペースを移動する代わりに、そのようなベル文字ごとにビープ音が鳴ります。
s[i]
)の状態:特殊記号\0
が来ると停止します。