2015-05-08 3 views
2
#include<stdio.h> 
#include <string.h> 
void main() 
{ 
    FILE *f = fopen("F:\\hongphat.txt","wb+"); 
    char *password = "password"; 
    int l = strlen(password); 
    fwrite(&l, sizeof(int), 1, f); 
    fwrite(&password, 1, strlen(password), f); 
    fclose(f); 

    FILE *g = fopen("f:\\hongphat.txt", "rb+"); 
    char *passwordsame = new char[250]; 
    int length; 
    fread(&length, sizeof(int), 1, g); 
    fread(passwordsame, length, 1, g); 
    int k = strlen(passwordsame); 
    fclose(g); 
    delete[]passwordsame; 
} 

я кода этот пример, чтобы сделать пароль для файла, но когда я сделал это, я вижу, что к не равна длине (длина = 8), может кто-нибудь показать свою ошибкуОшибка с двоичным файлом

ответ

2

Когда вы пишете пароль

fwrite(&password, 1, strlen(password), f); 

выражение &password не дает вам пароль-строку, это дает вам адрес, где passwordпеременная находится. Итак, что вы пишете, это указатель на строку, а не на строку.

Чтобы решить эту проблему, просто изменить к

fwrite(password, 1, strlen(password), f); 

Другими словами, удалить адрес-оператора &.


У вас также есть еще одна ошибка в том, что, когда вы читаете пароль из файла, вы не прекратить строка. Все строки должны заканчиваться символом '\0'.

После того, как вы прочли длину и пароль, сделайте, например.

passwordsame[length] = '\0'; 
+0

@ PhátNguyễn Вы делаете правильные вещи с длиной, то вам нужен указатель, но так как 'password' уже является указатель получать свой адрес даст вам указатель на указатель на' полукокс '(или' char ** '). –

+0

кажется, есть еще одна ошибка, k по-прежнему не равна длине –

+0

@ PhátNguyễn Обновлено мой ответ –

0

В этом C-коде есть так много синтаксических ошибок. В этом коде, как вы использовали

* пароль

для этого вам не нужно использовать «&» в FWRITE, но если вы хотите использовать «&», то вы должны его объявить

char password[]="password"; 

Я немного изменил ваш код. Код должен быть

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

void main() 
{ 
    FILE *f, *g; 
    int l,k,length,n; 
    char passwordsame[255]; 
    char password[]="password"; 
    f = fopen("hongphat.txt","wb+"); 
    l= strlen(password); 
    fwrite(&l, sizeof(int), 1,f); 
    fwrite(&password,strlen(password)+1,1, f); 
    fclose(f); 

    g = fopen("hongphat.txt", "rb+"); 
    fread(&length, sizeof(int), 1, g); 
    printf("%d\n\n",length); 
    fread(&passwordsame, length, 1, g); 
    passwordsame[length]='\0'; 
    k = strlen(passwordsame); 
    fclose(g); 
} 
Смежные вопросы