回答
這應該工作,當你由於某種原因不能使用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. 讀取一行,並一次讀取三個字母C
- 2. 如何在unix中使用C shell一次讀取一行
- 3. 在Python中一次讀取stdin行
- 4. 一次讀取4行
- 5. 在UNIX中一次讀取兩行文本文件一行
- 6. 在C#中讀取第一百萬行
- 7. 一次讀取文本文件一行
- 8. SqlDataReader每隔一行讀取一次?
- 9. 一次從文件中讀取兩行
- 10. 在C中一次讀取一個文件16字節0
- 11. 一次讀取一個文件的行數C#
- 12. 讀取一行同時C++
- 13. C++讀取一行數字
- 14. 如何在同一行中兩次讀取同一個文件
- 15. 一次讀取inputStream
- 16. C#數據表一次只取一行
- 17. 一次只讀一行
- 18. C從文件中讀取一行
- 19. 在Fortran 95中一次又一次讀取文件的內容
- 20. 如何在bash中一次讀取和運行10行命令?
- 21. 一次讀取二進制文件中的一個字段C
- 22. 從輸入文件一次讀取一個字在c + +
- 23. android sqlite一次讀取所有行
- 24. 一次只能讀取N行(MySQL)
- 25. 一次讀取兩行CSV(Java)
- 26. Fortran read()讀取最後一行兩次?
- 27. 一次使用Bash讀取n行
- 28. Python - 一次從文件讀取1000行
- 29. 只能讀取一次串行數據
- 30. 在c中每次讀取一個文件的字節數
所以你不想讀一行,你想讀直到遇到一個空格?或者你是否說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