我读了一个文件并存储了所有这样的字符:
void ReadFile()
{
int c;
FILE *file;
int string_size;
file = fopen("/userFiles/ex.txt", "r");
char * content;
if (file)
{
// Seek the last byte of the file
fseek(file, 0, SEEK_END);
// Offset from the first to the last byte, or in other words, filesize
string_size = ftell(file);
// go back to the start of the file
rewind(file);
// Allocate a string that can hold it all
content = malloc((string_size + 1) * sizeof(char));
int i = 0;
while ((c = getc(file)) != EOF)
{
//printf("%c",(char) c);
content[i] = (char) c;
i++;
}
content[string_size] = '\0';
printf("content: %s",content);
fclose(file);
}
else
{
printf("not load\n");
}
}
问题是,如果我阅读每个carachter我已经获得了该文件的内容但是如果我这样做:
printf("content: %s",content);
我只是一个符号而不是文本,而我需要在json回复的参数中传递带有正确文本的内容var。
这是文件的第一行(CRC32):
�ex.txtk��X�?xml version =" 1.0"编码=" UTF-8"
答案 0 :(得分:-1)
我编译并运行了以下代码,它在执行时没有显示出任何重大问题。
我使用的可编译版本是(cmdline:gcc main.c -Wall -Wextra -o main):
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
int main(void)
{
int c;
FILE *file;
int string_size;
file = fopen("plop", "r");
char * content;
if (file == NULL)
{
perror("fprintf");
return 1;
}
// Seek the last byte of the file
fseek(file, 0, SEEK_END);
// Offset from the first to the last byte, or in other words, filesize
string_size = ftell(file);
// go back to the start of the file
rewind(file);
// Allocate a string that can hold it all
content = malloc((string_size + 1) * sizeof(char));
int i = 0;
while ((c = getc(file)) != EOF)
{
//printf("%c",(char) c);
content[i] = (char) c;
i++;
}
content[string_size] = '\0';
printf("content: %s", content);
return 0;
}
也许你的文件有二进制内容?
你提到的印刷符号是什么?
答案 1 :(得分:-2)
我认为你应该在内容字符串周围使用引号""
:
printf("content: \"%s\"",content);