• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Język C - tablica tablic i tablica wskaźników - o co chodzi?

Object Storage Arubacloud
0 głosów
776 wizyt
pytanie zadane 20 grudnia 2017 w C i C++ przez k3ybo4rd Obywatel (1,180 p.)

Cześć, na szybko opiszę problem bo jadę za chwilę do pracy

Jak to się dzieje i dlaczego tak się dzieje że jeżeli użyjemy tablicy tablic

oraz strcpy do skopiowania danych do bufora to wszystkie dane na początku pokazują się normalnie


/* Znajdź słowa które posiadają wymaganą ilość znaków w łańcuchu 
        na wejściu podajemy o jakiej długości chcemy wypisać słowa      i/lub (niekoniecznie) tekst
        na wyjściu wypisujemy słowa o podanej długości
        Np:
        Podaj długość: 3
        1. Dom
        2. Ala
        3. Pan
        4. Bar
        itd.
*/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>

#define MAX 256
#define MAX_MEDIUM 65535

int main() {

        FILE * file_pointer;
        file_pointer = fopen("Lorem.txt", "r");
        char edit_text[MAX_MEDIUM] = {0};
        fread(edit_text, sizeof(char), MAX_MEDIUM, file_pointer );
        char new_table[MAX][MAX];
        char * word;

        unsigned int count = 0;
        unsigned int myLength = 0;

        printf("Jak długich słów potrzebujesz?: ");
        scanf("%d", &myLength);

        if(myLength > MAX) {
                printf("Niedozwolone !");
                return 1;
        }
        word = strtok(edit_text, " .,:=;-!?\n\'\"\t");
        while( word != NULL) {
                if(strlen(word) == myLength && strlen(word) > 0 ) {
                        strcpy(new_table[count], word);
                        count++;
                }
                word = strtok(NULL, " .,:=;-!?\n\'\"\t");
        }

        for(int i = 0; i < count; i++)
        {
                printf("[%d] -> %s = %ld \n", i, new_table[i], strlen(new_table[i]) );
        }

        return 0;

}


A jeżeli użyjemy tablicy wskaźników to na początku mamy krzaczki i inne jakieś losowe dane


/* 
Dla tablicy wskaźników
Znajdź słowa które posiadają wymaganą ilość znaków w łańcuchu 
        na wejściu podajemy o jakiej długości chcemy wypisać słowa      i/lub (niekoniecznie) tekst
        na wyjściu wypisujemy słowa o podanej długości
        Np:
        Podaj długość: 3
        1. Dom
        2. Ala
        3. Pan
        4. Bar
        itd.
*/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>

#define MAX 256
#define MAX_MEDIUM 65535

int main() {

        FILE * file_pointer;
        file_pointer = fopen("Lorem.txt", "r");
        char edit_text[MAX_MEDIUM] = {0};
        fread(edit_text, sizeof(char), MAX_MEDIUM, file_pointer );
        char * new_table[MAX]; // TU TABLICA WSKAŹNIKÓW;
        char * word;

        unsigned int count = 0;
        unsigned int myLength = 0;

        printf("Jak długich słów potrzebujesz?: ");
        scanf("%d", &myLength);

        if(myLength > MAX) {
                printf("Niedozwolone !");
                return 1;
        }
        word = strtok(edit_text, " .,:=;-!?\n\'\"\t");
        while( word != NULL) {
                if(strlen(word) == myLength && strlen(word) > 0 ) {
                        new_table[count] = word; // TU PRZYPISANIE DO WSKAŹNIKA
                        count++;
                }
                word = strtok(NULL, " .,:=;-!?\n\'\"\t");
        }

        for(int i = 0; i < count; i++)
        {
                printf("[%d] -> %s = %ld \n", i, new_table[i], strlen(new_table[i]) );
        }

        return 0;

}

 

1 odpowiedź

+1 głos
odpowiedź 20 grudnia 2017 przez j23 Mędrzec (194,920 p.)
edycja 20 grudnia 2017 przez j23
char edit_text[MAX_MEDIUM + 1] = {0};

 

I popraw pętlę:

while( cout < MAX && word != NULL ) 
{
	if(word[0] && strlen(word) == myLength)  { ... }
	...

 

Choć sensowniej byłoby na początku sprawdzić, czy myLength jest większa od zera, wtedy pierwsza część warunku if jest zbędna.

komentarz 20 grudnia 2017 przez k3ybo4rd Obywatel (1,180 p.)
Dzięki za odpowiedź, mankament był w tym że źle pewną część programu zinterpretowałem już działa.

Podobne pytania

0 głosów
1 odpowiedź 441 wizyt
pytanie zadane 12 stycznia 2017 w C i C++ przez kidcudi6 Nowicjusz (170 p.)
0 głosów
3 odpowiedzi 364 wizyt
0 głosów
1 odpowiedź 1,143 wizyt
pytanie zadane 3 stycznia 2016 w C i C++ przez CichoCiemny Początkujący (480 p.)

92,661 zapytań

141,553 odpowiedzi

319,995 komentarzy

62,028 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...