проблема fread fwrite с двумерным символом - PullRequest
0 голосов
/ 17 августа 2011
po = fopen("C:\\Progra~1\\WinLib\\settings.txt","w+");
num=1;
fwrite(&num,sizeof(int),1,po);

char* kra[2]={"asdasdasd","123123123"};


h=sizeof(kra[0]);
fwrite(&h,sizeof(int),1,po);
h=sizeof(kra[1]);
fwrite(&h,sizeof(int),1,po);
fwrite (kra[0] , 1 , sizeof(kra[0]) , po );
fwrite (kra[1] , 1 , sizeof(kra[1]) , po );  


rewind(po);
char* c1;
char* c2;   
fread(&num,1,sizeof(int),po);
fread(&h,1,sizeof(int),po);
fread(&k,1,sizeof(int),po);   
c1=(char*) malloc (sizeof(char)*h);
c2= (char*) malloc (sizeof(char)*k);
fread (c1,1,h,po);
fread (c2,1,k,po);

printf("%s %s\n",c1,c2);

но вывод не asdasdasd 123123123 это asda─ 1231─

Что мне нужно изменить?

Ответы [ 3 ]

2 голосов
/ 17 августа 2011

Ваша переменная kra представляет собой массив указателей, которые вы затем назначаете двум константным строкам.

Вызов sizeof () даст вам размер указателя (предположительно, вы находитесь на 32-битной машинеи так это 4 байта).Вам нужно использовать strlen (kra [0]), чтобы записать всю длину строки в файл.

1 голос
/ 17 августа 2011

Используйте strlen вместо sizeof, вот хорошая сумма .

1 голос
/ 17 августа 2011
h=sizeof(kra[0]);
fwrite(&h,sizeof(int),1,po);

необходимо изменить на

const char * h = kra[0];
fwrite(h, strlen(h), 1 po)

То же самое для kra[1]

...