使用 C(系统调用)将整数矩阵写入文本文件?
Using C (syscall) to write an integer matrix into a text file?
所以,我有我的矩阵,比方说
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 中确实有一些东西,但它是一些难以辨认的符号。
感谢期待任何帮助。
几件事。
首先,您需要为缓冲区分配内存。 sizeof(buffer)
将是指针的大小,而不是缓冲区长度,因此您将其存储在 buf_len
中。根据矩阵中数字的位数,缓冲区中可能需要或多或少的 space。
然后,您不想在每次 snprintf
调用时写入 buffer
的开头,但是 strchr(buffer, '[=15=]')
会 return 指向您所在位置的指针想写信给。第二个参数应该是你当前所在位置的缓冲区长度,即 buf_len - strlen(buffer)
。
最后,您只想向文件写入 strlen(buffer)
个字节,这样您就不会向文件写入随机字节。
char *buffer;
int buf_len = 100;
buffer = (char*)malloc(buf_len);
buffer[0] = '[=10=]';
for (int i = 0 ; i < N ; i++)
{
for (int j = 0 ; j < N ; j++)
{
snprintf(strchr(buffer, '[=10=]'), buf_len - strlen(buffer), "%d", matC[i][j]);
}
}
int fdC = open("fileC.txt", O_RDWR);
write(fdC, buffer, strlen(buffer));
free(buffer);
所以,我有我的矩阵,比方说 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 中确实有一些东西,但它是一些难以辨认的符号。 感谢期待任何帮助。
几件事。
首先,您需要为缓冲区分配内存。 sizeof(buffer)
将是指针的大小,而不是缓冲区长度,因此您将其存储在 buf_len
中。根据矩阵中数字的位数,缓冲区中可能需要或多或少的 space。
然后,您不想在每次 snprintf
调用时写入 buffer
的开头,但是 strchr(buffer, '[=15=]')
会 return 指向您所在位置的指针想写信给。第二个参数应该是你当前所在位置的缓冲区长度,即 buf_len - strlen(buffer)
。
最后,您只想向文件写入 strlen(buffer)
个字节,这样您就不会向文件写入随机字节。
char *buffer;
int buf_len = 100;
buffer = (char*)malloc(buf_len);
buffer[0] = '[=10=]';
for (int i = 0 ; i < N ; i++)
{
for (int j = 0 ; j < N ; j++)
{
snprintf(strchr(buffer, '[=10=]'), buf_len - strlen(buffer), "%d", matC[i][j]);
}
}
int fdC = open("fileC.txt", O_RDWR);
write(fdC, buffer, strlen(buffer));
free(buffer);