我正在尝试使用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;
谢谢
与所有其他字符串函数一样,strcspn
依赖于以 null 结尾的字符串。
如果输入不包含换行符,则由于缺少终止符,strcspn
函数将超出范围。
您还需要处理read
返回文件末尾或错误的情况,这分别由它返回0
或-1
来指示。正如手册中指定的那样(您真的应该阅读!
只需在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] = ' '; // Terminate string
// Terminate a newline
buf[strcspn(buf, "n")] = ' '; // Truncate at newline (if any)
}