我正在尝试使用read(int fd, void *buf, size_t count);
从STDIN中读取输入
输入为EOF时应如何处理案件?还是空字符串?目前,我遇到了细分错误
这是代码段:
int rd;
char buf[100];
rd = read(0, buf, 99);
buf[strcspn(buffer, "\n")] = 0;
谢谢
答案 0 :(得分:4)
与所有其他字符串函数一样,strcspn
依赖以空字符开头的字符串。
如果输入不包含换行符,则strcspn
函数将因缺少终止符而超出范围。
您还需要处理read
返回文件末尾或错误的情况,这由它分别返回0
或-1
来表示。就像指定的in the manual(您应该真正阅读!)一样。
仅在read
成功之后,在read
调用之后直接在适当位置添加终止符:
rd = read(STDIN_FILENO, buf, sizeof buf - 1); // sizeof buf relies on buf being an actual array and not a pointer
if (rd == -1)
{
// Error, handle it
}
else if (rd == 0)
{
// End of file, handle it
}
else
{
// Read something
buf[rd] = '\0'; // Terminate string
// Terminate a newline
buf[strcspn(buf, "\n")] = '\0'; // Truncate at newline (if any)
}