gpt4 book ai didi

c - C 中的 read() 函数错误

转载 作者:太空宇宙 更新时间:2023-11-04 05:34:50 24 4
gpt4 key购买 nike

我试图从 .txt 文件中读取,直到我遇到字符“=”。文本文件总是相同的,只包含这些字符串:

TaskLimit=3
cc pr.c && ./a.out

有时代码工作正常并退出 while 循环,有时它打印“TaskLimit”但随后抛出“Segmentation fault (core dumped)”错误。任何想法我做错了什么?我应该清除 buf[] 还是什么?

   char buf[1];

file = open(argv[1], O_RDONLY);
if (file == -1){
perror("Error opening file");
exit(1);
}
while(1){
read(file, buf, 1);
if(buf[0]=='=') {printf("I'm out");break;}
printf("%c",buf[0]);

//further actions

编辑:在“进一步行动”中,我试图将 char 转换为 int,这似乎是问题所在:

char limit_char[0];
int limit;
read(file,limit_char,1);
limit=atoi(limit_char[0]);

编辑2:改变这一行

limit=atoi(limit_char[0]);

limit=atoi(&limit_char);

有帮助。

最佳答案

C 编程中最重要的部分是检查返回值。

在您的示例代码示例中,您为 open(2) 执行此操作,但不是为 read(2) 执行此操作,您应该这样做,因为它不仅会告诉您是否存在是一个错误,它还告诉已经读取了多少字节。手册页摘录:

   On success, the number of bytes read is returned (*zero indicates end of file*),
and the file position is advanced by this number.

也就是说,知道没有更多内容可读 - 返回值为零 - 可以让你在用户给你一个无效文件的情况下跳出循环。

当您学习 C 时,我建议(以及该站点上的几乎每个人)始终使用 -Wall -Wextra -Werror 进行编译。 C 是一门简朴的语言,掌握它需要纪律。 GCC(或任何你的编译器)永远不会让你执行:

limit=atoi(&limit_char);

由于 &limit_char 的类型实际上是 char ** 并且 atoi 需要一个 const char *

关于c - C 中的 read() 函数错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42157512/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com