使用C(syscall)将整数矩阵写入文本文件?

时间:2017-05-24 19:30:12

标签: c matrix system-calls

所以,我有我的矩阵,让我们说 int matC [N] [N], 已填充整数值。

我要做的是将此矩阵保存到.txt文件中。 我试过这个:

1:将矩阵中包含的整数转换为字符串

char *buffer;
for (int i = 0 ; i < N ; i++)
{
    for (int j = 0 ; j < N ; j++)
    {
        snprintf(buffer, sizeof(matC[i][j]), "%d", matC[i][j]);
    }
}

2:将字符串写入文件(fileC.txt)

int fdC = open("fileC.txt", O_RDWR);
write(fdC, buffer, sizeof(buffer));

我确实在我的fileC.txt中得到了一些东西,但它是一些不可理解的符号。 感谢您的期待。

1 个答案:

答案 0 :(得分:0)

一些事情。

首先,您需要为缓冲区分配内存。 sizeof(buffer)将是指针的大小,而不是缓冲区长度,因此您将其存储在buf_len中。根据矩阵中数字的位数,缓冲区中可能需要更多或更少的空间。

然后,您不希望在每个buffer调用时写入snprintf的开头,但strchr(buffer, '\0')将返回指向您要写入的位置的指针。第二个参数应该是您当前所在位置的缓冲区长度,即buf_len - strlen(buffer)

最后,您只想将strlen(buffer)个字节写入文件,这样就不会将随机字节写入文件。

char    *buffer;
int     buf_len = 100;


buffer = (char*)malloc(buf_len);
buffer[0] = '\0';
for (int i = 0 ; i < N ; i++)
{
    for (int j = 0 ; j < N ; j++)
    {
        snprintf(strchr(buffer, '\0'), buf_len - strlen(buffer), "%d", matC[i][j]);
    }
}

int fdC = open("fileC.txt", O_RDWR);
write(fdC, buffer, strlen(buffer));
free(buffer);