C 从使用fread()读取的文件打印字符串无法正常工作
我是C语言的初学者,我正在尝试学习使用函数来处理文件,例如fread()和fwrite(),但是当我从文件中读取字符串并使用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
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.