Artur-W Temat założony przez niniejszego użytkownika |
C, tablica char » 2015-12-04 19:39:50 Mam problem z wyłuskaniem danych z pliku do tablicy char. W pliku zapisane są wyrazy (w 1 linii 1 wyraz, oddzielone znakiem nowej linii), wiem, że deklarując char wyraz[] tworzę tablicę dla 1 stringa. Mam teraz pytanie jak zrobić tablicę typu char dla n wyrazów, które chce pobrać z pliku, np. 1 tablica przechowując 20 wyrazów. Proszę o pomoc, gdyż szukałem, ale nie mogłem znaleźć odpowiedzi. |
|
pekfos |
» 2015-12-04 20:26:02 Tablica dwuwymiarowa? |
|
Artur-W Temat założony przez niniejszego użytkownika |
» 2015-12-04 21:23:51 Po prostu chcę wczytać do tablicy char kilka wyrazów. Podam przykład: wyraz1 wyraz2 wyraz3 itd. Tak ma wyglądać struktura tablicy, aby w 1 komórce był 1 wyraz. Czyli będzie 1 wymiarowa. Nie wiem, czy ma być też podany rozmiar stringa w tej tablicy, bo np. deklarując tablicę dla jednego stringa podaję rozmiar char *wyraz[20];. I właśnie nie wiem jak zrobić to w tablicy o kilku rekordach, próbowałem tak char *tab[100][20] (100 rekordów a rozmiar stringa do 20 znaków bo na końcu zawsze jest zero) i próbowałem wpisać w pole zmienną wyraz, ale nie działa. Dlatego szukam pomocy. |
|
carlosmay |
» 2015-12-04 21:32:52 To jest odpowiedź. Sam napis to tablica char . Chcesz zapisać kilka wyrazów pod kilkoma indeksami, to tablica dwuwymiarowa. czy ma być też podany rozmiar stringa w tej tablicy, |
Musi być podany, czy to statyczna czy dynamiczna tablica. char * tab[ 100 ][ 20 ] to jest tablica dwywymiarowa. Czemu nie tablica 'string'? Taki wymóg? |
|
Artur-W Temat założony przez niniejszego użytkownika |
» 2015-12-05 12:27:45 Program ładnie się kompiluje, zapisuje dane do pliku i wypisuje z pliku bo sprawdzałem. Jednak gdy zrobiłem tablicę i chciałem ją wypisać program wyrzuca błąd ,,Naruszenie ochrony pamięci (zrzut pamięci)''. Podejrzewam, że przepełniłem bufor, tyko nie widzę gdzie. Mógłby ktoś pomóc i wskazać to miejsce oraz podać jaką komendę najlepiej użyć do wyczyszczenia bufora? (Program piszę na linuksie i kompiluję w terminalu, przez terminal też wprowadzam argumenty.) #include <stdio.h> #include <stdlib.h> #include <string.h> #include <ctype.h>
int main( int argc, char * argv[] ) { char * tab[ 40 ][ 16 ]; char wyraz[ 16 ]; FILE * fp; fp = fopen( argv[ 1 ], "w+" ); if( !fp ) { fprintf( stderr, "Nie moge otworzyc pliku %s\n", argv[ 1 ] ); exit( - 1 ); } int i; for( i = 2; i < argc; ++i ) { fprintf( fp, "%s\n", argv[ i ] ); } fclose( fp ); fp = fopen( argv[ 1 ], "r" ); int j; for( j = 2; j < argc; j++ ) { fscanf( fp, "%s\n", wyraz ); tab[ j - 2 ][ 1 ] = wyraz; } fclose( fp ); for( int i = 0; i < argc - 2; i++ ) { printf( "%s\n", tab[ i ][ 0 ] ); } return 0; }
|
|
ArgonZapan |
» 2015-12-06 14:11:52 char * tab[ 40 ][ 16 ]; W ten sposób tworzysz dwuwymiarową tablicę wskaźników typu char, w której jesteś stanie zapisać 16*40=640 wyrazów, o niezdefiniowanej długości. char * tab[ 40 ]; W ten sposób tworzysz tablicę wskaźników typu char, gdzie jesteś w stanie zapisać 40 wyrazów, o niezdefiniowanej długości. char tab[ 40 ][ 20 ]; W ten sposób tworzysz dwuwymiarową tablicę typu char, gdzie jesteś w stanie zapisać 40 wyrazów z maksymalnie 20 znakami na wyraz |
|
« 1 » |