Revin cu ceva nelamuriri legate de xCode, daca ma poate ajuta cineva as fi recunoscatoare. Incerc sa folosesc fisiere. O sa pun sursa de la un program simplu care citeste o variabila dintr-u fisier rtf.
#include
int main (int argc, const char * argv[])
{
FILE *f;
int i;
f=fopen(“in.rtf”, “r”);
i=fscanf(f,”%i”,&i);
printf(”%i”,i);
return 0;
}
La rulare apar urmatoarele:
Loading program into debugger…
Program loaded.
run
[Switching to process 315]
Running…
Program received signal: “EXC_BAD_ACCESS”.
sharedlibrary apply-load-rules all
(gdb)
Imi poate explica cineva unde gresesc, sau de unde erorile acestea?
abia m-am apucat si eu de objective c dar nici eu nu inteleg de ce te complici.
scrie cu vi in terminal sau cu orice editor codul tau la la inceput #include stdio.h
si vezi ca i-ul ala nu este initializat,doar l-ai declarat si are o valoare de….el stie cat
variabilele externe din ce stiu sunt initializate automat cu 0 dar cele din auto nu.
P.S. nu apare stdio.h daca pun semnele
< si >
probabil si la tine la fel cand ai scris aici si a ramas doar #include
i-ul nu trebuie initializat pentru ca peste el pun valoarea din fisier, nu ma folosesc de valoarea lui initiala. stdio.h nu este pentru ca am copiat eu prost, in program il am. Si am reusit sa nu imi mai dea eroare doar k nu stiu din ce motiv nu imi afiseaza corect. In fisier eu am numarul 123, si el afiseaza 0. Tu unde ai pus in.rtf ? Langa executabil?
Folosește pe viitor tagurile [ code ], astfel vei putea da paste la program corect.
Ai mai multe probleme in program.
1) NU merge ce vrei tu cu fișier rtf, rtf e formatat. Ai nevoie de fișier text. Nu de asta crapă, dar și dacă nu ar crăpa, tot nu ar merge.
2) NU verifici ce returneaza fopen. mai exact, acum apelul nu reușește pentru că probabil fișierul ăla nu se află în directorul curent al aplicației. Încearcă să folosești pathul absolut sau pune-l unde trebuie. Mai încolo, folosești fscanf() cu un fișier neinițializat, de asta crapă.
3) Folosești fscanf ala să citești din fișier în variabila i, dar de asemenea atribui lui i valoarea returnată de scanf, care dacă va reuși va fi totdeauna 1, (dacă nu va reuși va fi 0) că citești un singur număr. Dacă te interesează ce returnează scanf folosește altă variabilă. În acest caz, nu prea te interesează ce returnează scanf.
i-ul nu trebuie initializat pentru ca peste el pun valoarea din fisier, nu ma folosesc de valoarea lui initiala. stdio.h nu este pentru ca am copiat eu prost, in program il am. Si am reusit sa nu imi mai dea eroare doar k nu stiu din ce motiv nu imi afiseaza corect. In fisier eu am numarul 123, si el afiseaza 0. Tu unde ai pus in.rtf ? Langa executabil?
Ce editor folosești să scrii fișierul ăla? Dacă folosești TextEdit atunci trebuie să dai Format->Make Plain Text întâi.
Am reusit. Aceasta era problema. Nu am stiut ca nu deschide rtf. Am folosit word ca sa salvez de tip .txt si a mers perfect. Multumesc mult. O seara buna tuturor !