【发布时间】:2016-01-09 01:00:23
【问题描述】:
我必须从一个文件中读取一个数组,而事实上 i 是最后一列并没有被复制。数组的大小及其内容在文件中。这是代码(仅是问题所在的部分):
#include<stdio.h>
#include<stdlib>
int main(int argc, char * argv[]){
char **laberinto;
char aux;
fent = fopen(argv[1], "r");
if
fprintf(stderr,"Couldn't open.\n");
else
{
laberinto = (char **) calloc(columnas, sizeof(char *));
for (i = 0; (NULL != laberinto) && (i < columnas); i++)
{
laberinto[i] = (char *) calloc(filas, sizeof(char));
if (NULL == laberinto[i])
{
for ( j = i - 1; j >= 0; j-- )
free(laberinto[j]);
free(laberinto);
laberinto = NULL;
}
}
for(i = 0, j = 0; i < filas+1; i++)
for(j = 0; j < columnas+1; j++)
{
if(!feof(fent))
{
aux = fgetc(fent);
if(aux == '\n')
aux = 0;
}}
Edit 1(full code) it generates a core by the way:
#include#include #include"encruta1.h"//只是函数定义(尚未使用) #define ERRORCOMANDO "错误:不正确的命令线。Utilice:\n" #define ERRORCOMAND2 "leelabfich fichero_de_entrada columna_inicio fila_inicio\n" //都是错误信息 int main(int argc, char *argv[]) { char **laberinto; 字符辅助; int i = 0;//indice para imprimir la tabla int j = 0;//indice para imprimir la tabla 整数列 = 0; int filas = 0; int flag1;//Para saber si fscanf ha funcionado bien 文件 *fent; //Si son cuatro argumentos es correcto 如果(argc == 4) { //Apertura de 档案馆 fent = fopen(argv[1], "r"); 如果(芬== NULL) fprintf(stderr,"No se puede abrir el fichero de entrada.\n"); 别的 { flag1 = fscanf(fent,"%d%d", &columnas, &filas); 如果(标志1 == 2) { if(filas = 0; j-- ) 免费(laberinto [j]); 免费(laberinto); laberinto = NULL; } } //Pasamos el laberinto del archivo a la tabla for(i = 0, j = 0; i
【问题讨论】:
-
您的代码示例无法编译。这是您一直在使用的实际代码吗?
fent,columnas,i,filas,j, ... 都是未定义的。最好知道文件格式/内容是什么。 -
不,它只是一个简短的版本。我将编辑以放置完整的代码
-
请只使用与编译相关的部分并说明您的问题。 sscce
-
不要将
calloc()转换为char **,这没有必要。 -
抱歉第一次发帖。我现在已经花了大约一个小时来寻找和思考解决方案