C/Visual C - Ejemplo de que fgets NO_FUNCIONA... Ayudenme ='(

 
Vista:

Ejemplo de que fgets NO_FUNCIONA... Ayudenme ='(

Publicado por CatiritaCoder (3 intervenciones) el 12/06/2007 16:53:07
/*********************************************************************************************/
/* CÓDIGO */
/********************************************************************************************/
#include <stdio.h>
#include <string.h>
#include <conio.h>

struct tpila
{ int cima;
int elementos[40];
}pila;

void crear(struct tpila *pila);
void apilar(struct tpila *pila, int elem);
void desapilar(struct tpila *pila, int *elem);

int c,n,cn,i,x,cantx,canty,log,len;
char *linea;
FILE *archin;

int main()
{ archin=fopen("xy.txt","r");
fscanf(archin,"%d",&n);
cn=0;
while(cn<n)
{ log=1;
crear(&pila);
fgets(linea,100,archin); //ERROR EN TIEMPO DE EJECUCIÓN!!
len=strlen(linea);
if(len>80) log=0;
i=cantx=canty=0;

while((log)&&(i<len))
{ if(canty>cantx) log=0;
if(linea[i]=='X') cantx++;
if(linea[i]=='Y') canty++;
if((i==len-1)&&(cantx!=canty)) log=0;
i++;
}

if(!log) printf("NO\n");
else if(log)
{ printf("YES");

for(i=0;i<len;i++)
{ if(linea[i]=='X') apilar(&pila,i+1);
if(linea[i]=='Y')
{ desapilar(&pila,&x);
printf(" %d %d",x,i+1);
}
}
printf("\n");
}

cn++;
}//while

fclose(archin);
getch();
return 0;
}//main

void crear(struct tpila *pila)
{
pila->cima = -1;
}

void apilar(struct tpila *pila, int elem)
{
pila->elementos[++pila->cima] = elem;
}

void desapilar(struct tpila *pila, int *elem)
{
*elem = pila->elementos[pila->cima--];
}

/*********************************************************************************************/
/* ARCHIVO DE TEXTO */
/********************************************************************************************/
3
AFEDXHDHDHYXYHDRXIORYFDRE
VDFDXYGDHEYEWD
FXMXHYZTYMU
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Ejemplo de que fgets

Publicado por fernando.gomez (1603 intervenciones) el 12/06/2007 18:16:46
Hay dioses, pues claro que no funciona. Declaras la variable:

char *linea;

un puntero a caracter, y sin embargo la empleas sin inicializar:

fgets(linea,100,arch); //ERROR EN TIEMPO DE EJECUCIÓN!!

Pues claro que es un comportamiento indefinido, "linea" apunta a cualquier dirección de memoria.

Para este caso, tendrías que declarar tu variable de otra forma, digamos:

char linea[101];
...
fgets(linea, 100, arch);

etcétera. O si deseas ubicar la memoria en forma dinámica:

char* linea;
linea = malloc(101*sizeof(char));
...
fgets(linea, 100, arch);
...
free(linea);

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar