Czytanie znaków z pliku i przechowywanie ich w zmiennej w C
Próbuję czytać znak po znaku z pliku i przechowywać znaki w zmiennej.
Wymagana jest tylko zawartość pierwszej linii pliku, więc używam
\ nlub
EOF, aby zatrzymać czytanie. Wymagane jest również przechowywanie
SPACE.
Oto mój program:
#include<stdio.h>
#include<string.h>void main()
{
FILE *fp;
char ch;
char txt[30];
int len;
fp=fopen("~/hello.txt","r");
ch=fgetc(fp);
while(ch != EOF || ch!="\n")
{
txt[len]=ch;
len++;
ch=fgetc(fp);
}
puts(txt);
}
Ale pojawia się ostrzeżenie w czasie kompilacji, takie jak porównanie wskaźnika i liczby całkowitej. Kiedy go uruchamiam, pojawia się błąd segmentacji.
Nie znaleziono powiązanych wyników
Zaproszony:
Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się
5 odpowiedzi
Anonimowy użytkownik
Potwierdzenie od:
Ponadto, jak widać z innych odpowiedzi, używasz bez inicjalizacji.
Wreszcie zdajesz sobie sprawę, że może to zrobić. Możesz przepisać to na:
Anonimowy użytkownik
Potwierdzenie od:
2) z
fgetc()
http://cplusplus.com/reference/cstdio/fgetc/
strony:
zatem zwraca , a nie , więc musisz zdefiniować jako
3) Dodatkowo
do
cnicutar zauważa, że warunek należy przetestować za pomocą , a nie :
4) po zakończeniu odczytu z pliku należy dodać znak terminatora o wartości null na końcu bufora .
Dodaj tę linię po pętli
txt[len]='\0';
BTW
możesz przeczytać pierwszą linię za pomocą , jest to łatwiejsze. Po prostu użyj poniższego kodu
fscanf(fp, "%29[^\n]", txt);
„% [^ \ n]”
oznacza, że odczyta wszystkie znaki z z wyjątkiem i przestanie czytać, jeśli otrzyma ten znak. W ten sposób odczyta wszystkie znaki z , aż znajdzie znak i zapisze je w buforze z zerowym terminatorem na końcu. [/code]"% 29 [^ \ n]"
oznacza, że odczyta wszystkie znaki z , dopóki nie znajdzie znaku lub aż osiągnie 29 odczytanych znaków i zapisuje je w buforze z zakończeniem zerowym na końcu.Anonimowy użytkownik
Potwierdzenie od:
Oprócz błędu wskazanego przez cnicutar, powinieneś także sprawdzić wartość zwracaną z przed użyciem .
Anonimowy użytkownik
Potwierdzenie od:
Anonimowy użytkownik
Potwierdzenie od: