[英]Read string from file in C
我有一個包含多個字符串的文件,每個字符串都在單獨的行上。 所有字符串均為32個字符長(因此33個結尾處帶有'\\ n')。
我正在嘗試閱讀所有字符串。 現在,我只想閱讀它們,而不是按以下方式存儲它們:
char line[32];
while (!feof(fp)) {
fgets(line, 32, fp);
}
printf("%s", line);
打印出零。 為什么不起作用?
此外,我試圖在讀取的每個字符串的末尾存儲一個空終止符。 我將line
陣列的長度更改為33
但是如果找到'\\n'
,如何將其替換為\\0
並存儲呢?
您的代碼無法正常工作,因為您只為30個字符加上換行符和空終止符的行分配了空間,並且因為在 feof()
返回true 之后只打印了一行。
另外, feof()
僅在您嘗試並且無法讀取文件末尾之后才返回true。 這意味着, while (!feof(fp))
一般是不正確-你應該簡單地讀,直到讀功能失效-在這一點上,你可以使用feof()
/ ferror()
其他類型的檔案結尾和區分故障(如果需要)。 因此,您的代碼可能看起來像:
char line[34];
while (fgets(line, 34, fp) != NULL) {
printf("%s", line);
}
如果要在line
找到第一個'\\n'
字符並將其替換為'\\0'
,則可以使用<string.h>
strchr()
:
char *p;
p = strchr(line, '\n');
if (p != NULL)
*p = '\0';
這是一種基本方法:
// create an line array of length 33 (32 characters plus space for the terminating \0)
char line[33];
// read the lines from the file
while (!feof(fp)) {
// put the first 32 characters of the line into 'line'
fgets(line, 32, fp);
// put a '\0' at the end to terminate the string
line[32] = '\0';
// print the result
printf("%s\n", line);
}
它是這樣的:
char str[33]; //Remember the NULL terminator
while(!feof(fp)) {
fgets(str, 33, fp);
printf("%s\n",str);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.