Итак, вот моя проблема ( мои вопросы в конце ),
Я пытаюсь инициализировать список " Personne " из файла. Вот структура " Personne " и код, который я использую:
struct:
struct s_personne {
char name[STRING];
unsigned char password[SHA256_DIGEST_LENGTH];
char *salt;
char email[LSTRING];
};
code:
int parseMyJsonPersonne(Plist l){
FILE* fichier = NULL;
char buffer[1024];
char temp[502];
struct json_object *parsed_json;
struct json_object *name;
struct json_object *password;
struct json_object *salt;
struct json_object *email;
Personne p = (Personne)malloc(sizeof(Personne));
fichier = fopen("../../data/Personne.json", "r");
if (fichier != NULL) {
while (fgets(temp, 502, fichier)!=NULL) {
//printf("temp : %s", temp);
strncat(buffer, temp, strlen(temp));
if (strcmp(temp, "}\n")==0) {
//printf("Object find\n");
//printf("buffer : \n%s\n\n", buffer);
parsed_json = json_tokener_parse(buffer);
json_object_object_get_ex(parsed_json, "name", &name);
json_object_object_get_ex(parsed_json, "password", &password);
json_object_object_get_ex(parsed_json, "salt", &salt);
json_object_object_get_ex(parsed_json, "email", &email);
if (setPAll(p, (char *)json_object_get_string(name), (char *)json_object_get_string(password), (char *)json_object_get_string(salt), (char *)json_object_get_string(email))!=0) {
puts("Une ERREUR est survenue dans l'assemblage d'un objet (type=Personne)\n");
return 1;
}
if (addPersonne(p, l)!=0){
puts("Une ERREUR est survenue dans l'assemblage d'un objet (type=PList)\n");
return 1;
}
memset(buffer, '\0', 1024);
}
}
}
else {
puts("Une ERREUR est survenue lors du chargement des différents comptes\n\n");
return 1;
}
puts("Checkpoint 1 !!!");
fclose(fichier);
puts("Checkpoint 2 !!!");
free(p);
free(name);
free(password);
free(salt);
free(email);
return 0;
}
ошибка возникает, когда я пытаюсь сделать fclose (fichier); , однако я уже знаю, что причина проблемы заключается в вызове функции setPAll . Этот вызов вызывает функцию setPPassword , которая имеет следующий код:
int setPPassword(Personne p, char * password) {
char stock[2];
long val;
printf("length of password (=64 ?) : %ld\n", strlen(password));
printf("lenght p->password (=32 ?) : %d\n\n", SHA256_DIGEST_LENGTH);
if (strlen(password) != 64) {
puts("ERROR in setPPassword");
return 1;
}
for(size_t i=0; i<SHA256_DIGEST_LENGTH; i++) {
stock[0]=password[2*i];
stock[1]=password[2*i+1];
printf("stock : %s\n", stock);
val = strtol(stock, NULL, 16);
p->password[i]=(unsigned char)val;
printf("value in p->password at %ld : %02x\n",i, p->password[i]);
}
return 0;
}
проблема связана с значением p-> password [i] = (unsigned char);
Проблема в том, что мне действительно нужен мой p-> пароль , чтобы содержать шестнадцатеричные значения. Так есть ли способ исправить эту ошибку при инициализации моего p-> пароля или есть способ обойти ее, изменив мою функцию setPPassword ?