使用二维char来解决fwrite问题

时间:2011-08-17 11:21:41

标签: c stdio

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 个答案:

答案 0 :(得分:2)

你的kra变量是一个指针数组,然后你将它们分配给两个常量字符串。

sizeof()调用将给出指针的大小(可能是你在32位机器上,所以这是4个字节)。您需要使用strlen(kra [0])将字符串的整个长度写入文件。

答案 1 :(得分:1)

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

必须更改为

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

kra[1]

的情况相同

答案 2 :(得分:1)

使用strlen而不是sizeof,这是一个很好的sumup