2015-07-22 41 views
0

我遇到了一个相当离奇的问题在这里。我使用的fopen和fprintf写一个句子到一个文件:写入文件,但无法找到数据时,我从桌面上拉起文件

#include <stdio.h> 
#include <stdbool.h> 
#include <math.h> 
#include <string.h> 

int main (void) { 
    FILE *fp; 
    fp = fopen("wageData.txt","w"); 
    fprintf(fp, "Hi, I like pie"); 
    return 0; 
} 

然而,当我打开wageData.txt在桌面上,是绝对没有它。在另一方面,如果我尝试读取文件,我得到的信息:

#include <stdio.h> 

int main (void) { 
    //FILE *fp; 
    //fp = fopen("wageData.txt","r+"); 
    FILE *c; 
    if ((c = fopen("wageData.txt","r")) == NULL) 
     printf("File not available"); 
    else { 
     char x[3][6]; 
     int i = 0; 

     while (fgets(x[i], 30, c) != NULL) { 
      i++; 
     } 

     for (i = 0; i < 6; i++) { 
      printf("%s\n", x[i]); 
     } 
    } 

    return 0; 
} 

编译,它会导致:

Hi, I like pie 
like pie 
ie 
[? 
m?iՖ 

logout 

[Process completed] 

有人可以告诉我这到底是怎么回事呢?提前致谢。

+0

char x [** 3 **] [** 6 **]; – BLUEPIXY

+0

首先,在调用fgets时,你不应该让更多的字符比你有内存。使用你的代码,你只能读取3个字符串,每个字符6个字符,所以你不应该通过30,但6,你不应该循环直到EOF,但只循环3次。 你的第二个循环是从可能的3个字符串列表中打印6个字符串。 你基本上是打印随机部分的内存,并得到完全按预期的随机结果。 我认为你应该使用我,你打算看看有多少字符串在你打印时读出。它可能是0,没有读到。 – Cobusve

+0

'char x [3] [6]中的尺寸;'不匹配你使用'x'的方式,并且如果文件具有''fgets超过17个字符。无论如何,你正在用'printf()'循环读出界限。另外,您确定桌面上的文件与您的程序写入的文件相同吗?会不止有一个? – Dmitri

回答

-1

在您的原始程序中,您没有关闭该文件。这会导致奇怪的事情发生(通常情况下,除非必须写东西,否则不会写东西,如果你不关闭文件,它可能不会写,因为它认为可能有更多的数据,而你目前没有很多东西)。

编号: http://cplusplus.com/reference/cstdio/fclose

+0

在大多数系统上,当程序终止时文件会被关闭......如果不关闭文件是问题,那么当他用第二个程序读取文件时也不会有任何问题。 – Dmitri

+0

见[n1570.pdf](http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf)** 5.1.2.2.3程序终止**和** 7.22。 4.4退出功能** – BLUEPIXY

+0

https://msdn.microsoft.com/en-us/library/windows/desktop/aa364451(v=vs.85).aspx 我并不是在说这个程序在做什么 – MistaRhee