char数组中的char *解析错误

时间:2017-03-15 13:25:33

标签: c arrays json char readfile

我读了一个文件并存储了所有这样的字符:

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"

2 个答案:

答案 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);