そのため、スペースを無視する理由 (スペースを改行として扱う) と改行を考慮しない理由を理解しようとする単純なプログラムを作成しています。
言語: C++
プラットフォーム: Kubuntu 13.04
コンパイラ: g++
コード:
unsigned int lines;
string line_content;
ifstream r_tftpd_hpa("/etc/default/tftpd-hpa"); // open file
// test for errors
if ( r_tftpd_hpa.fail() ) {
cerr << "Error opening file: \"/etc/default/tftpd-hpa\"" << endl;
exit(1);
}
// loop through file until end
while ( !r_tftpd_hpa.eof() ) {
r_tftpd_hpa >> line_content;
lines++;
// I also tried with \n
if ( line_content[0] == ' ' ) { // my failed attempt at catching spaces
cout << endl << "Found empty line: " << lines << endl;
}
cout << "Line: " << lines << " content: " << line_content << endl;
}
出力:
Line: 1 content: #
Line: 2 content: /etc/default/tftpd-hpa
Line: 3 content: TFTP_USERNAME="tftp"
Line: 4 content: TFTP_DIRECTORY="/var/lib/tftpboot"
Line: 5 content: TFTP_ADDRESS="0.0.0.0:69"
Line: 6 content: TFTP_OPTIONS="--secure"
Line: 7 content: TFTP_OPTIONS="--secure"
ファイル自体:
# /etc/default/tftpd-hpa
TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/var/lib/tftpboot"
TFTP_ADDRESS="0.0.0.0:69"
TFTP_OPTIONS="--secure"
このファイルは 6 行で構成されていますが、7 行だと思われ#
ます。元のファイルの 1 行目以降のスペースは改行としてカウントされ、2 行目のスペースは無視されます。また6 and 7
、同じ行が 2 つあるかのように行を出力しますが、ありません。
ここで何が起こっているのか分かりますか?スペースと改行をどのように処理しますか?