Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

C, tablica char

Ostatnio zmodyfikowano 2015-12-06 14:11
Autor Wiadomość
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.
P-141401
pekfos
» 2015-12-04 20:26:02
Tablica dwuwymiarowa?
P-141407
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.
P-141413
carlosmay
» 2015-12-04 21:32:52
Tablica dwuwymiarowa?
 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?
P-141414
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.)

C/C++
#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;
}
P-141429
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
P-141489
« 1 »
  Strona 1 z 1