質問: 0; i < len; i++) { printf(" %02X", *p & 0xff); p++; } printf("\n"); } int main(int atgc, char** argv) { char str[10]; strcpy(str, "0\n"); printf("[%s]\n", str); chop(&str[2]); printf("[%s]\n", str); dump(str, sizeof(str)); printf("\n"); strcpy(str, "0\n"); printf("[%s]\n", str); chop2(&str[2]); printf("[%s]\n", str); dump(str, sizeof(str)); return 0; } // 実行結果 naka@naka ~ $ cd kadai/kad9-8 naka@naka ~/kadai/kad9-8 $ gcc -g void_chop.c naka@naka ~/kadai/kad9-8 $ a.exe [0 ] [0] 30 00 00 50 37 00 80 00 40 00 [0 ] [0 ] 30 0A 00 50 37 00 80 00 40 00 naka@naka ~/kadai/kad9-8 $ ```
回答: 文字列として扱う char* のエリアに対して、 「最後に \r,\n で続いている部分があったら、それを取り除く」 つまり、**改行コードを取り除く**ことをやっています。 通常、C で標準入力から1行取得するようなことをすると、改行コードも含めて取得します。 そのままだと文字列処理に都合が悪いので、改行コードを取り除いているのです。