我正在尝试将文件读入2d数组。
第一行包含数组的大小(例如4,3) 然后我需要创建一个4x3和一个3x4数组并读入值。
我遇到了分段错误。是因为我需要在使用sscanf之后倒带吗?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define LINE_LEN 100
int main(int argc, char ** argv)
{
int ** arr1;
int ** arr2;
int i,col,row;
FILE * dfile;
char line[LINE_LEN];
char * token;
int num1,num2;
const char delim[2] = " ";
if ((dfile = fopen(argv[1], "r")) == NULL) {
fprintf(stderr, "Error opening input file.\n");
exit(EXIT_FAILURE);
}
fscanf(dfile, "%d %d\n", &num1, &num2);
arr1 = malloc(num1 * sizeof(int*));
for (i = 0; i < num1; i++) {
arr1[i] = malloc(num2* sizeof(int));
}
arr2 = malloc(num2 * sizeof(int*));
for (i = 0; i < num2; i++)
{
arr2[i] = malloc(num1 * sizeof(int));
}
col = 0;
for(i=0; i<num1; i++)
{
row = 0;
fgets(line, LINE_LEN, dfile);
token = strtok(line, delim);
while (token != NULL)
{
token = strtok(NULL, delim);
arr1[col][row] = atoi(token);
row++;
}
col++;
}
col=0;
for(i=0; i<num2; i++)
{
row=0;
fgets(line,LINE_LEN,dfile);
token = strtok(line,delim);
while(token != NULL)
{
token = strtok(NULL,delim);
arr2[col][row] = atoi(token);
row++;
}
col++;
}
}
文件示例
4 3
0 0 1 2
1 1 0 2
2 1 2 0
3 1 0 2
0 0 1 2 3
2 2 3 1 0
1 2 1 3 0
答案 0 :(得分:2)
NULL
传递给atoi
函数,它会导致Segmentation Falut。
在将token
传递给NULL
之前,请先检查atoi
是否num1
。num2
和$num = 21;
if($required_rows < 21)
$filler_rows = 20 - $required_rows;
else {
$i = 0;
while(true){
$num = $num + 27;
if($required_rows < $num) {
$filler_rows = 24 - ($required_rows - 23 - (27*$i));
break;
} else {
$i++;
}
}
}
行之后的每一行都有一个额外的数字,这会导致越界访问。