将int写入c中的文件:变得怪异的字符“\ 00”

时间:2018-04-20 07:05:50

标签: c int

我想使用函数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”时,我明白了: enter image description here 这是我如何初始化我的数组**时间

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显示的内容(我不知道如何解释泄漏摘要): enter image description here

1 个答案:

答案 0 :(得分:4)

这一行错了:

write(f, tmp, sizeof(tmp));

无论字符串的实际长度如何,您始终都在写sizeof(tmp)(= 16)个字节。字符串的长度为strlen(tmp)

所以这是正确的:

write(f, tmp, strlen(tmp));

但无论如何,使用fopen代替openfprintf代替sprintf后跟write更容易。

valgrind输出与此问题无关。