C语言 读取系统调用的空字符串输入导致分段错误



我正在尝试使用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)
}

相关内容

  • 没有找到相关文章

最新更新