簡體   English   中英

從C中的文件讀取字符串

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM