Function fread not terminating string by \0

前端 未结 3 2086
遥遥无期
遥遥无期 2020-12-17 20:55

New to files in C, trying to read a file via fread

Here\'s the content of the file:

line1 how

Code used:

char c[6];         


        
相关标签:
3条回答
  • 2020-12-17 21:15

    Sorry i'm a little late to the party.

    No, fread doesn't handle this for you. It must be done manually. Luckily its not hard. I like to use fread()'s return to set the NUL like so:

    char buffer[16+1]; /*leaving room for '\0' */
    x = fread(buffer, sizeof(char), 16, stream);
    buffer[x]='\0';
    

    and now you have yourself a \0 terminated string, and as a bonus, we have a nifty variable x, which actually saves us the trouble of running strlen() if we ever needed it later. neat!

    0 讨论(0)
  • 2020-12-17 21:16

    No. The fread function simply reads a number of elements, it has no notion of "strings".

    • You can add the NUL terminator yourself
    • You can use fgets / fscanf instead

    Personally I would go with fgets.

    0 讨论(0)
  • 2020-12-17 21:19

    The man page for fread says nothing about adding a terminating zero at the end of the file.

    If you want to be safe, initialize all the bytes in your c array to be zero (via bzero or something like that) and when you read in, you'll then have a terminating null.

    I've linked the two man pages for fread and bzero and I hope that helps you out.

    0 讨论(0)
提交回复
热议问题