2016-07-25 75 views
-2

我试图c使用fwrite()功能进行非常简单的转存存储器程序,但它发生了错误...转储内存()

这是我的代码,dumpCode()功能得到起始地址,结束地址,和名字。

然后在for循环中,我想转储内存并生成文件。

void dumpCode(char* start, char* end, char* subject ) 
{ 
    FILE *fp; 
    char *i; 
    char fileName[100]; 

    // make file name 
    sprintf(fileName, "/storage/emulated/0/test/%s-%s.txt", start,end); 

    fp = fopen(fileName, "wb"); 

    for (i = start; i <= end ; i++) 
     fwrite(start, 1,10*sizeof(unsigned long long),fp); 

    fclose(fp); 
} 

我认为这是很简单,但我无法找到错误。我的代码中有什么问题?

+2

'我试图在c中使用fwrite()函数制作非常简单的转储内存程序,但它发生错误......'但是什么是错误?首先阅读http://www.tutorialspoint.com/c_standard_library/c_function_fwrite.htm –

+0

检查'fopen'后'fp'是否为'NULL'。如果因任何原因无法打开/创建文件,就会发生这种情况。 –

+1

谁说你可以简单地访问任何地址?您很可能无法访问违规/段错误。你说什么错误? –

回答

0

您应该检查fpNULL与否后fopen。只有当的fopen OK,你可以使用fwrite将数据写入file.Now,你不知道的错误,你可以打印errno看什么错误发生了。 另外,我注意到,你的fopen这个文件与wb,这意味着如果这个文件存在,删除它并重新创建它然后写入数据。

#include<errno.h> 
void dumpCode(char* start, char* end, char* subject ) 
{ 
    FILE *fp; 
    char *i; 
    char fileName[100]; 
    int count = 0; 
    // make file name 
    sprintf(fileName, "/storage/emulated/0/test/%s-%s.txt", start,end); 

    fp = fopen(fileName, "wb"); 
    if(NULL == fp){ 
     printf("fopen error,errno is %d\n",errno); 
    }else{ 
     for(i = start; i <= end ; i++){ 
      if(fwrite(start, 1,10*sizeof(unsigned long long),fp) == 0) 
       printf("fwrite error,errno is %d\n",errno); 
     } 
     fclose(fp); 
    } 
} 
1

您可能试图访问不存在的文件。为了确保你没有犯这个错误,你必须检查fopen的返回值。事实上,如果返回值为NULL,这意味着你没有试图访问有效或现有的文件。

这里是你应该做的:

void dumpCode(char* start, char* end, char* subject ) 
{ 
    FILE *fp; 
    char *i; 
    char fileName[100]; 

    // make file name 
    sprintf(fileName, "/storage/emulated/0/test/%s-%s.txt", start,end); 

    if ((fp = fopen(fileName, "wb")) == NULL) 
     printf("Error: Could not open '%s'\n", fileName); 

    for (i = start; i <= end ; i++) 
     fwrite(start, 1,10*sizeof(unsigned long long),fp); 

    fclose(fp); 
} 

希望这有助于。