我想使用函数write将一些int写入二进制文件。我的整数是两个“数组”,我想把每个int写入我的文件。我的代码:
void write_graph(int **time, int **tailles, int lenght, int thread_number) //lenth = nombre de tests pour un nombre de coeur
{
int f, i, j;
char tmp[16] = {0x0};
f = open("val", O_CREAT | O_RDWR | O_TRUNC, 0666);
if (f < 0)
{
perror("open in write_graph");
return;
}
else
{
for (j = 0; j < lenght; j++)
{
for (i = 0; i < thread_number; i++)
{
int ti = time[i][j];
int tl = tailles[i][j];
printf("%d %d",ti, tl);
//sprintf(tmp, "%d %d", ti, tl);
sprintf(tmp, "%d", ti);
write(f, tmp, sizeof(tmp));
}
write(f, "\n", 1);
}
}
}
通常情况下,我也会从**尾部写出整数,但它包含随机数,我没有任何错误(我简化了一下我的代码)。在我的for循环中,我有一个printf。它很好地显示了我的整数。但当我打开我的文件“val”时,我明白了: 这是我如何初始化我的数组**时间
time = malloc(thread_number * sizeof(int *));
tailles = malloc(thread_number * sizeof(int *));
for (i = 0; i < thread_number; i++)
{
time[i] = malloc(lenght * sizeof(int));
tailles[i] = malloc(lenght * sizeof(int));
}
for (i = 0; i < thread_number; i++)
{
for (j = 0; j < lenght; j++)
{
time[i][j] = j;
tailles[i][j] = Random(1, 10);
}
}
我尝试了很多不同的技术,但我仍然得到了相同的结果......我不知道如何在一个文件中写一个int ... 这是valgrind显示的内容(我不知道如何解释泄漏摘要):
答案 0 :(得分:4)
这一行错了:
write(f, tmp, sizeof(tmp));
无论字符串的实际长度如何,您始终都在写sizeof(tmp)
(= 16)个字节。字符串的长度为strlen(tmp)
:
所以这是正确的:
write(f, tmp, strlen(tmp));
但无论如何,使用fopen
代替open
和fprintf
代替sprintf
后跟write
更容易。
valgrind输出与此问题无关。