所以,我有这部分代码:
for (lin = 0; lin < linhas_mat1; lin++)
{
fgets(linha_s, MAX_LINHA, matriz1_file);
buffer = strtok(linha_s, " ");
for (col = 0; col < colunas_mat1; col++)
{
printf ("\nCOLUNA: %d", col);
if (&matriz1[lin][col] == NULL)
printf ("erro");
matriz1[lin][col] = atoi(buffer);
buffer = strtok(NULL, " ");
}
}
它将文件中的矩阵放入内存中。开放和分配没有给出错误(至少我认为)。奇怪的是,错误似乎发生在(通过打印当前行的编号而发现)最后2个元素上(在上一个代码之前或最后一个元素,如果我添加一些打印,这甚至更奇怪)并且仅在矩阵有5行或更多行。之前的行被添加到内存中没有问题,所以我不明白为什么最后的元素会产生问题。有人知道问题是什么或者我如何找到问题的一些提示?
答案 0 :(得分:0)
代码本身没有问题。我能看到的唯一可能的原因是,当输入文件的列少于您指定的列时,它将导致段错误。
以下是您的代码的完整版本,我只添加了一些初始化
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main() {
int lin, col, linhas_mat1, colunas_mat1;
char* buffer;
char linha_s[1023];
int matriz1[8][5];
linhas_mat1 = 8; colunas_mat1 = 5;
const int MAX_LINHA = 20;
FILE *matriz1_file = fopen("aa.txt", "r");
for (lin = 0; lin < linhas_mat1; lin++)
{
fgets(linha_s, MAX_LINHA, matriz1_file);
buffer = strtok(linha_s, " ");
for (col = 0; col < colunas_mat1; col++)
{
//printf ("\nCOLUNA: %d", col);
if (&matriz1[lin][col] == NULL)
printf ("erro");
matriz1[lin][col] = atoi(buffer);
printf("%d ", matriz1[lin][col]);
buffer = strtok(NULL, " ");
}
printf("\n");
}
}
如果您将以下文件作为输入,矩阵将获得所有值而没有任何问题,除非您从中删除了一些列。
1 2 9 4 5
1 2 3 4 5
1 2 3 4 5
1 2 3 4 5
1 2 3 4 5
1 2 3 4 5
1 2 3 4 5
1 2 3 4 5