使用fwrite()转储内存

时间:2016-07-25 07:04:39

标签: android c memory java-native-interface dump

我试图在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 个答案:

答案 0 :(得分: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);
}

希望这有帮助。

答案 1 :(得分:0)

你应该在fp之后检查NULLfopen。只有当fopen ok,你可以使用fwrite将数据写入文件。现在,你不知道错误,您可以打印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);
    }
}