我想将String数组保存到二进制文件中。 我搜索并试过,没有提出正常的二进制文件内容。 (不是像00 0A 10)想出来的(8죅?<죅?A?E죅?) - 用韩文写的。
代码的写作部分是
FILE *fp_course = fopen("KJH_course.dat", "wb");
while ((row = mysql_fetch_row(res)) != NULL) { //JUST FOR FETCHING DATA FROM MYSQL, WORKED WELL
printf("%s %s %s %s\n", row[0], row[1], row[2], row[3]);
fwrite(row, sizeof(row), 1, fp_course);
};
行中的数据是{' 32141183',' JHK',' 2'} (最后一行[3]后来用于更大的数组)
我写错了什么?
答案 0 :(得分:4)
sizeof
运算符不返回字符串的长度,我想row
是一个指针,sizeof
它只是一个指针的大小,你做不到你想要的尝试方式。
您需要每个项目的长度,所以
for (int i = 0; i < 4 ; ++i) {
fwrite(row[i], 1, strlen(row[i]), fp_course);
}
以这种方式写入文件的内容是无用的,因为您不知道每个字符串的长度,因此无法读回它们。
所以也许你需要做一些像
这样的事情for (int i = 0; i < 4 ; ++i) {
char *string;
int length;
string = row[i];
length = strlen(string);
fwrite(&length, sizeof(length), 1, fp_course);
fwrite(string, 1, length, fp_course);
}
这样你就可以回读数据了。
答案 1 :(得分:4)
MySQL documentation has an example:
MYSQL_ROW row;
unsigned int num_fields;
unsigned int i;
num_fields = mysql_num_fields(result);
while ((row = mysql_fetch_row(result)))
{
unsigned long *lengths;
lengths = mysql_fetch_lengths(result);
for(i = 0; i < num_fields; i++)
{
printf("[%.*s] ", (int) lengths[i],
row[i] ? row[i] : "NULL");
}
printf("\n");
}
请注意,返回的MYSQL_ROW
不一定有nul终止的字符串(根据评论,引用如下),因此您无法安全地调用strlen()
列 - 而是您必须致电mysql_fetch_lengths()
。
MYSQL_ROW是一个以空字符结尾的字符串数组。 (但是,如果字段值可能包含二进制数据,则不能将这些视为以空值终止的字符串,因为此类值可能在内部包含空字节。)