2017-05-24 66 views
1

所以,我有我的矩阵,我们说 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文件中找到了一些东西,但它是一些无法理解的符号。 感谢您期待任何帮助。

+0

你所有的'snprintf'调用都在你的缓冲区开始时覆盖相同的4个字节(可能取决于你系统的其他数字)。 – aragaer

+3

您需要为缓冲区分配内存,“sizeof”指针就是指针的大小,而不是分配的内存。 –

+0

您将错误的'sizeof'传递给'snprintf':它应该是目标缓冲区的大小,它不一定是您要打印的东西的大小。 –

回答

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); 
+0

给定'buffer =(char *)malloc(buf_len);',strchr(buffer,'\ 0')'和'strlen(buffer)'是未定义的行为。 –

+0

@AndrewHenle谢谢你的接受,修正它 – digglemister