回答
这应该工作,当你由于某种原因不能使用fgets()
。
int readline(FILE *f, char *buffer, size_t len)
{
char c;
int i;
memset(buffer, 0, len);
for (i = 0; i < len; i++)
{
int c = fgetc(f);
if (!feof(f))
{
if (c == '\r')
buffer[i] = 0;
else if (c == '\n')
{
buffer[i] = 0;
return i+1;
}
else
buffer[i] = c;
}
else
{
//fprintf(stderr, "read_line(): recv returned %d\n", c);
return -1;
}
}
return -1;
}
thanx buddy其准备工作但仍有问题.. 我的缓冲区正在读取和存储整行 ,但在打印时只有第一个空间分隔符只有 – 2010-03-03 16:36:11
这很奇怪,我可以使用'printf(“%s \ n”,buffer);'它输出整个缓冲区 – LukeN 2010-03-03 16:38:30
yeh, 对我来说也是很奇怪的。因为它适用于所有以前的程序...:'( – 2010-03-03 16:48:35
的fgets
功能从文件中读取或num
字符,其中num
是传递给fgets
第二个参数一行。你是否传递了足够多的数字来阅读该行?
对于实施例
// Reads 500 characters or 1 line, whichever is shorter
char c[500];
fgets(c, 500, pFile);
比。
// Reads at most 1 character
char c;
fgets(&c,1,pFile);
兼用fgets
,如果你知道你的行会放入缓冲区或使用fgetc
为更好地控制阅读
如果您编码具有可GNU C库的平台,您可以使用函数getline():
该功能也可在BSD系统中使用,仅供参考;) – 2013-07-28 09:03:24
这比一个完整的答案评论,但我没有足够的点评论。 :)
这里的函数原型与fgets():
char *fgets(char *restrict s, int n, FILE *restrict stream);
它会读取n-1个字节或最多换行或EOF。欲了解更多信息,请参阅here
使用fgets
从读取线,然后用getc(...)
咀嚼换行或结束行继续阅读....这里是永远读线的例子...
// Reads 500 characters or 1 line, whichever is shorter char c[500], chewup; while (true){ fgets(c, sizeof(c), pFile); if (!feof(pFile)){ chewup = getc(pFile); // To chew up the newline terminator // Do something with C }else{ break; // End of File reached... } }
使用以下程序从文件中逐行获取。
#include <stdio.h>
int main (void)
{
char filename[] = "file.txt";
FILE *file = fopen (filename, "r");
if (file != NULL) {
char line [1000];
while(fgets(line,sizeof line,file)!= NULL) /* read a line from a file */ {
fprintf(stdout,"%s",line); //print the file contents on stdout.
}
fclose(file);
}
else {
perror(filename); //print the error message on stderr.
}
return 0;
}
错误来源:
其实这不是我的错.. 在这种情况下。 我正在使用strtok函数,并意外修改我的原始我的原始字符串。 因此,尽管印刷我得到的错误...
谢谢大家对我的帮助.. :)
可以代替用fgets的的fscanf。由于fgets fscanf用于包含空格的字符,但在使用fscanf时,您可以单独访问保存在file.eg中的数据,因此存在具有名称类别卷的文件。现在声明一个字符串和两个整数行。
- 1. 如何在unix中使用C shell一次读取一行
- 2. 在Python中一次读取stdin行
- 3. SqlDataReader每隔一行读取一次?
- 4. 一次从文件中读取两行
- 5. 在C中一次读取一个文件16字节0
- 6. C++读取一行数字
- 7. 如何在同一行中两次读取同一个文件
- 8. 一次读取inputStream
- 9. 在Fortran 95中一次又一次读取文件的内容
- 10. C从文件中读取一行
- 11. 一次读取二进制文件中的一个字段C
- 12. Fortran read()读取最后一行两次?
- 13. 一次只能读取N行(MySQL)
- 14. Python - 一次从文件读取1000行
- 15. 一次使用Bash读取n行
- 16. C - 无需使用fgets/getline,一次从文件1行读取
- 17. 一次在多个文件中批量读取R读取
- 18. 写一个程序,读取hoilday.txt的内容,一次一行
- 19. C fgets strtok和atoi在C中读取一行
- 20. c#每按一下按钮一行一行读取文件
- 21. 在c#中读取一行而不修剪行分隔符
- 22. 一次一行读取文件时的性能vs读取整个文件
- 23. 从文本文件中读取一次4行或几行
- 24. jQuery一次读取一个JSON对象
- 25. 在C++中读取Filename的一部分
- 26. 多次读取一个阅读器
- 27. 如何使用C#读取一行HTML#
- 28. ASP.Net C#使用第一行读取器
- 29. 从C++中的二进制一次读取4个字节
- 30. 如何通过使用pyserial一次读取一行
所以你不想读一行,你想读直到遇到一个空格?或者你是否说fgets停止空间而不是换行符? – 2010-03-03 16:06:29
只应停在换行字符上。 – 2010-03-03 16:21:12
这里是我的输入:: START 直流10 乙DS 20 STOP 我:: START 一个 乙 STOP 作为我的输出.. – 2010-03-03 16:21:56