fgets()
単純に行を読み取って改行を削除するために使用したい。これは、Windows と UN*X の両方で、すべてのケースで機能しますか?
fgets(buf, sizeof buf, stdin);
strtok(buf, "\r\n");
GNU の getline() のような非標準のものは推奨しないでください。前もって感謝します!
fgets()
単純に行を読み取って改行を削除するために使用したい。これは、Windows と UN*X の両方で、すべてのケースで機能しますか?
fgets(buf, sizeof buf, stdin);
strtok(buf, "\r\n");
GNU の getline() のような非標準のものは推奨しないでください。前もって感謝します!
いいえ、クロスプラットフォームが必要な場合は、適切に実行してください。
fgets (buf, sizeof (buf), stdin);
if (strlen (buf) > 0)
if (buf[strlen (buf) - 1] == '\n')
buf[strlen (buf) - 1] = '\0';
Windows で作成されたファイルを UNIXで読み取るときに問題が発生する可能性がありますが(たとえば)、標準入力を変更するという本来の目的には問題ありません。
への複数の呼び出しが心配な場合strlen
:
fgets (buf, sizeof (buf), stdin);
{
size_t len = strlen (buf);
if (len > 0)
if (buf[len - 1] == '\n')
buf[len - 1] = '\0';
}
ちなみに、改行の削除、バッファオーバーフローの検出、余分な行のクリーンアップを行い、標準 C のみを使用する堅牢な行入力ソリューションを探している場合は、この回答をご覧ください。
いいえ、改行の内部(解釈)表現は常に'\n'です。それで:
strtok(buf, "\n");
一般に、改行変換が自動的に機能するには、ファイルをテキストモードで開く必要があります。
text = fopen("text", "r"); // Conversion works
binary = fopen("binary", "rb"); // Won't work
みんなありがとう。このラッパーを書くことになった:
void
getstr(char *s, size_t n)
{
int c;
if (fgets(s, n, stdin) != NULL) {
if (s[strlen(s) - 1] == '\n')
s[strlen(s) - 1] = '\0';
else
while ((c = getchar()) != EOF && c != '\n')
;
}
}