C - 来自文件的fread char

时间:2017-03-03 03:17:14

标签: c arrays fread chars

我有一个虚拟程序,它在文件中写入一些字符:

int main (int argc, char **argv)
{
    char i = '0';
    int j = 0;
    FILE * fp = NULL;

    fp = fopen("num.txt","w+");
    if(!fp){
        printf("fopen failed\n");
        return -1;
    }
    fseek(fp, SEEK_SET, 0);

    while(1){
        if (j >500) {
            fclose(fp);
            return 0;
        }
        usleep(5000);
        fwrite(&i,sizeof(char),1,fp);
        if (j%27 ==0) {
            i ='0';
        }
        i++;
        j++;
    }
    fclose(fp);
    return 0;
}

另一个我需要从该文件中读取的程序,这是一个片段:

 if ((num = fopen("num.txt", "r+")) == NULL){
    perror("Error al obrir l'arxiu");   
}

fseek( num, posicio, SEEK_SET );
fread(resposta, sizeof(char), offset, fp);
while(contador <500){
    printf("%c",resposta[contador]);
    contador++;
}
printf(" la resposta contiene %s \n",resposta);A

我想从“posicio”这个位置读取“偏移”字符。 “resposta”是一个500个字符的数组。虽然你可以看到第二个程序是因为我很绝望,当我执行第二个程序时,在控制台中出现了一堆符号如:xMh 在最后printf的。

我试着在while中读取字节到字节,但它一直让我得到这些符号,我不知道这可能是做什么的,我的第一个怀疑是我在某种程度上以二进制模式打开文件,但是没有!

1 个答案:

答案 0 :(得分:1)

所以这是你的第一个程序的重写,有一些很好的格式

#include <stdio.h>
#include <unistd.h>

int main(int argc, char **argv)
{
    char i = '0';
    int j = 0;
    FILE *fp;

    fp = fopen("num.txt", "w+");
    /*fseek(fp, SEEK_SET, 0);  - NOT NEEDED*/

    if (fp != NULL)
    {
        for (j=0; j<500; j++)
        {
            usleep(5000);

            fwrite(&i, sizeof(char), 1, fp);
            fflush(fp);

            if (j % 27 == 0)
                i = '0';

            i++;  /* could be put in the for() loop header */
        }
        fclose(fp);
    }

    return 0;
}

void readBlock(int posicio, int offset, char *resposta)
{
    int i;
    FILE *num = fopen("num.txt", "r+");

    if (num != NULL)
    {
        /* reposition to <posicio> bytes from the start of the file */
        fseek(num, posicio, SEEK_SET);

        /* read <offset> bytes from that position */
        fread(resposta, sizeof(char), offset, num);

        fclose(num);

        /* dump out the bytes */
        for (i=0; i<offset; i++)
        {
            printf("%c", resposta[i]);
        }

    }
}

请注意,在您的代码段#2中,您使用变量&#39;&#39;&#39;&#39;中的句柄打开文件,但随后从句柄中读取& #39;&#39; FP&#39;&#39 ;.这是故意的吗?它看起来像一个bug,但很难从这里说出来。