2014-09-03 125 views
0
#include <stdio.h> 
#include <string.h> 
#include <stdlib.h> 

int main() 
{ 
    FILE *f; 
    f = fopen("my file.txt", "w"); 
    int n = 5; 
    fprintf(f, "n equals to %d", n); 
    fclose(f); 
    f = fopen("my file2.txt", "w"); 
    char *txt = "New file"; 
    fwrite(txt, 1, strlen(txt), f); 
    fclose(f); 
    f = fopen("my file3.txt", "w"); 
    char *txt2 = "Hello"; 
    for(int i = 0; i < strlen(txt2); i++) 
    { 
     printf("Mouse cursor at %d.\n", ftell(f)); 
     fputc(txt2[i], f); 
    } 
    fclose(f); 
    f = fopen(__FILE__, "r"); 
    char str[1024]; 
    while (!feof(f)) 
    { 
    fscanf(f, "%s", str); 
    puts(str); 
    } 
    putchar('\n'); 
    fclose(f); 
    f = fopen(__FILE__, "r"); 
    long size = fseek(f, 0, SEEK_END); 
    char *buffer = malloc(sizeof(char) * size + 1); 
    fread(buffer, 1, size, f); 
    puts(buffer); 
    free(buffer); 
    fclose(f); 
    return 0; 
} 

的代码,您可以在这部分代码看看:打印文件

f = fopen(__FILE__, "r"); 
long size = fseek(f, 0, SEEK_END); 
char *buffer = malloc(sizeof(char) * size + 1); 
fread(buffer, 1, size, f); 
puts(buffer); 
free(buffer); 
fclose(f); 

我试图打印的代码在我的文件,这是我写的去做吧^ 当我尝试使用puts功能进行打印时,它会打印3个字符: http://i61.tinypic.com/ortdvl.png

第三个字符在每次执行时发生更改。 无论如何,我不知道为什么会发生这种情况,有人可以解释我做错了什么?

+4

fseek()不会返回除成功/失败指示外有用的任何东西。要么你找到了指定的位置,要么你没有。如果你想获得文件的大小,然后寻找到最后,然后使用ftell()或stat()文件,并从那里获取大小数据。 – 2014-09-03 18:32:44

+1

而'ftell'不返回鼠标光标位置。 – jweyrich 2014-09-03 18:34:52

+0

我知道它不会返回鼠标光标x,y我的意思是返回像字符索引的数量?或者你怎么说 – AALC 2014-09-03 19:03:29

回答

2
fseek(f, 0, SEEK_END); 
long size = ftell(f); 
char *buffer = calloc(size + 1, sizeof(char)); 
rewind(f); 
fread(buffer, 1, size, f); 
+0

fseek的回报,成功为0,其他不为0。 – BLUEPIXY 2014-09-03 18:43:30