使用C(系统调用)将整数矩阵写入文本文件?
所以,我有我的矩阵,我们说 int matC [N] [N], 它已经填充整数值。使用C(系统调用)将整数矩阵写入文本文件?
我所要做的就是将这个矩阵保存到一个.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文件中找到了一些东西,但它是一些无法理解的符号。 感谢您期待任何帮助。
有几件事。
首先,您需要为缓冲区分配内存。 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);
给定'buffer =(char *)malloc(buf_len);',strchr(buffer,'\ 0')'和'strlen(buffer)'是未定义的行为。 –
@AndrewHenle谢谢你的接受,修正它 – digglemister
你所有的'snprintf'调用都在你的缓冲区开始时覆盖相同的4个字节(可能取决于你系统的其他数字)。 – aragaer
您需要为缓冲区分配内存,“sizeof”指针就是指针的大小,而不是分配的内存。 –
您将错误的'sizeof'传递给'snprintf':它应该是目标缓冲区的大小,它不一定是您要打印的东西的大小。 –