我想用来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';
在 UNIX(例如)上读取 Windows 创建的文件时,您可能会遇到问题,但这将达到其预期目的,即修改标准输入。
如果您担心多次调用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')
;
}
}