Jump to content

SUBIECTE NOI
« 1 / 5 »
RSS
Incalzire in pardoseala etapizata

Suprataxa card energie?!

Cum era nivelul de trai cam din a...

probleme cu ochelarii
 Impozite pe proprietati de anul v...

teava rezistenta panou apa calda

Acces in Curte din Drum National

Sub mobila de bucatarie si sub fr...
 Rezultat RMN

Numar circuite IPAT si prindere t...

Pareri brgimportchina.ro - teapa ...

Lucruri inaintea vremurilor lor
 Discuții despre TVR Sport HD.

Cost abonament clinica privata

Tremura toata, dar nu de la ro...

Renault Android
 

Token file to struct

- - - - -
  • Please log in to reply
5 replies to this topic

#1
Davyid

Davyid

    Junior Member

  • Grup: Members
  • Posts: 83
  • Înscris: 04.02.2010
Salutare, am și eu o mică problemă, nu-mi dau seama mai exact de ce îmi rămâne mereu ultima linie salvată în structură.
Fisierul contine:
POP, IOAN
CHIS, MIHAI
..

#include <stdio.h>
#include <stdlib.h>
typedef struct
{
	char *nume;
	char *prenume;
}STUD;
int main()
{
	FILE *f=fopen("a.txt","r");
	char x[100];
	STUD *s=(STUD*)malloc(sizeof(STUD));
	int i=0;
	char *token;
	while(fgets(x,100,f)!=NULL)
	{
		s[i].nume=malloc(sizeof(100));
		s[i].prenume=malloc(sizeof(100));
		token=strtok(x,",");
		s[i].nume=token;
		token=strtok(NULL,",");
		s[i].prenume=token;
		i++;
	}
	printf("%s",s[0].nume);
	fclose(f);
return 0;
}


Mersi..

#2
adrian93

adrian93

    Active Member

  • Grup: Members
  • Posts: 1,740
  • Înscris: 29.10.2009
Nu prea inteleg la ce te referi prin "ramane mereu ultima linie salvata in structura", dar o observatie ar fi ca tu aloci memorie doar pentru un singur element de tip STUD.

#3
Davyid

Davyid

    Junior Member

  • Grup: Members
  • Posts: 83
  • Înscris: 04.02.2010
s[0].nume îmi e CHIS, nu POP..

#4
sags

sags

    Senior Member

  • Grup: Senior Members
  • Posts: 9,847
  • Înscris: 24.04.2013
In primul rand e musai sa corectezi ce ti-a semnalat mai sus @adrian93.

A doua observatie este ca:
s[i].…=malloc(sizeof(100));
nu prea are sens, si aloci mult mai putina memorie decat cred ca intentionezi (NU aloci 100 bytes…).

Apoi:
  • Oare chiar folosesti in vreun fel ceea ce crezi tu ca aloci acolo?
  • Cu un depanator, traseaza programul si vezi ce valori primesc pointerii s[0].nume, s[1].nume, etc. Nu cumva sunt egali? De ce?
  • Ce se intampla cu s[…].prenume? Nu cumva se strica atunci cand treci la linia urmatoare? (La fel si s[…].nume, dar dintr-o oarece intamplare sfarsesc cu ce ai constatat.)

Edited by sags, 26 January 2015 - 08:04.


#5
tatarduka

tatarduka

    Senior Member

  • Grup: Senior Members
  • Posts: 3,042
  • Înscris: 30.10.2006

Quote

s[i].nume=token;
s[i].prenume=token;
poate ar trebui sa folosesti strcpy in loc de '='...

#6
TS030

TS030

    Guru Member

  • Grup: Senior Members
  • Posts: 15,193
  • Înscris: 25.06.2012
Sau poate vrea sa duplice string-urile respective.

Ce sunt acei "100"?

De ce nu se dealoca memoria la final?

Recomand studierea efectului strtok() asupra sirului x (chiar daca in acest caz nu se intampla nimic "rau").

Anunturi

Chirurgia endoscopică a hipofizei Chirurgia endoscopică a hipofizei

"Standardul de aur" în chirurgia hipofizară îl reprezintă endoscopia transnazală transsfenoidală.

Echipa NeuroHope este antrenată în unul din cele mai mari centre de chirurgie a hipofizei din Europa, Spitalul Foch din Paris, centrul în care a fost introdus pentru prima dată endoscopul în chirurgia transnazală a hipofizei, de către neurochirurgul francez Guiot. Pe lângă tumorile cu origine hipofizară, prin tehnicile endoscopice transnazale pot fi abordate numeroase alte patologii neurochirurgicale.

www.neurohope.ro

0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users

Forumul Softpedia foloseste "cookies" pentru a imbunatati experienta utilizatorilor Accept
Pentru detalii si optiuni legate de cookies si datele personale, consultati Politica de utilizare cookies si Politica de confidentialitate