C 从使用fread()读取的文件打印字符串无法正常工作

C 从使用fread()读取的文件打印字符串无法正常工作,c,file,output,file-handling,fread,C,File,Output,File Handling,Fread,我是C语言的初学者,我正在尝试学习使用函数来处理文件,例如fread()和fwrite(),但是当我从文件中读取字符串并使用printf(“%s”,var”)输出时会出现问题这是下面用来测试功能的程序 #include <stdio.h> #include <string.h> void main() { FILE *farquivo; int i; char text[10]; char file[51] = "string0

我是C语言的初学者,我正在尝试学习使用函数来处理文件,例如fread()fwrite(),但是当我从文件中读取字符串并使用
printf(“%s”,var”)输出时会出现问题这是下面用来测试功能的程序

#include <stdio.h>
#include <string.h>

void main()
{
    FILE *farquivo;
    int i;
    char text[10];
    char file[51] = "string01  string02  string03  string04  string05  ";

    farquivo = fopen("dados.txt", "w");
    fwrite(file, 1, sizeof(file), farquivo);
    fclose(farquivo);

    farquivo = fopen("dados.txt", "r");
    printf("Sizeof text[] = %d\n", sizeof(text));
    printf("Strings by %%s:\n");
    fread(text, 1, sizeof(text), farquivo);
    printf("%s\n", text);
    fread(text, 1, sizeof(text), farquivo);
    printf("%s\n", text);
    fread(text, 1, sizeof(text), farquivo);
    printf("%s\n", text);
    fread(text, 1, sizeof(text), farquivo);
    printf("%s\n", text);
    fread(text, 1, sizeof(text), farquivo);
    printf("%s\n", text);
    printf("String char by char:\n");
    for(i = 0; i < sizeof(text); i++){
        printf("%c", text[i]);
    }
    printf("\n");
    fclose(farquivo);
}

由于某种原因,当我使用
printf(“%s”,var)时
打印字符串,它的结尾输出“`FÛu>”,但如果我一个接一个地打印字符串的每个字符,这不会发生,我使用它的方式是否正确?

当你看到这样的奇怪情况时,可能意味着你正在访问未分配的内存或未初始化的内存。在您的情况下,字符串不是以null结尾的


当您打印字符串时,它将输出字符,直到它达到内存中的第一个空值(即zer0)

fread()
不会将0字节添加到末尾,从而使
文本
不是有效的C字符串。在C中,字符串以nul结尾。您读取字符串的方法不会将nul字符放在字符串的末尾,因此当您打印它们时,字符串后面会出现垃圾。如果您使用
fwrite
而不是
printf
,则不需要以nul结尾的字符串。例如,将
printf
s替换为
fwrite(text,1,sizeof text,stdout)
。虽然C中的所有字符串都存在于字符数组中,可以这样处理,但字符数组不一定包含字符串,如果不包含字符串时将其作为字符串处理,则会出现未定义的行为。
Sizeof text[] = 10
Strings by %s:
string01  `FÛu>
string02  `FÛu>
string03  `FÛu>
string04  `FÛu>
string05  `FÛu>
String char by char:
string05

Process returned 0 (0x0)   execution time : 0.051 s
Press any key to continue.