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─
我需要改变什么?
答案 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。