Czy poprawne jest takie uzupelnianie tablicy dwuwymairowej ze stringami?

0

Czesc.
Czy poprawne jest takie uzupelnianie tablicy dwuwymairowej ze stringami?

int t=0;
char tablica[t][20];

for(i=0;jakis warunek;i++)
scanf("%s", &tablica[i]);

Nie jestem pewien czy tak moze byc. Przez kompilator(DevCpp) przechodzi i dziala ale moim zdaniem to troche dziwne.
To jedynie prosty przyklad ale chodzi mi o samo zrozumienie tego, bo jak zadeklarowalem tablice statyczna na 0 wierszy to jak pozniej moge cos zapisac do tej tablicy w np. 3 wierszu? Nie wychodzimy tutaj przypadkiem poza zakres(nie wiem jak to ujac) tablicy?

0

Niepoprawnie, musisz przy deklaracji podać rozmiar.

0
_13th_Dragon napisał(a):

Niepoprawnie, musisz przy deklaracji podać rozmiar.

Chodzi Ci o to, że niepoprawnie bo ilość wierszy jest na 0(a pozniej wpisuje stringi do wierszy 1,2,...,i), czy niepoprawnie bo deklaruje ilosc wierszy przez zmienna t?

Sorry za takie glupie pytania ale dopiero zaczynam :P

0

Nie wiem co kombinujesz, ale takie coś to herezja. Jeśli chcesz mieć rożne rozmiary tablicy definiowane już w trakcie działania porgramu, to poczytaj o dynamicznych tablicach 'new'/malloc.

0

Chyba troche zle sie wyrazilem, a dokladniej to zle opisalem problem.
Chodzi mi o takie cos.
Tablica output jest poczatkowo zadeklarowana na [0][10](0 wierszy, 10 kolumn), wiec gdzie przy kopiowaniu trafiaja stringi o indeksach wiersza > 0 ?
Drukuje normalnie, a Dev nie wyrzuca zadnych bledow

int n, i, j = 0;
    scanf("%d",&n);
	
	char base[n][10];
        char output[j][10];
	int liczba[n];
	
	for(i = 0; i < n; i++) 
    {
		scanf("%s", &base[i]);
		scanf("%d", &liczba[i]);
		
		if(liczba[i] == 0) 
        {
			strcpy(output[j], base[i]);
			j++;
		}
	}
	for(i = 0; i < j; i++)
		printf("%s\n", output[i]);
0

Jak chcesz tablice jednowymiarową to podajesz tylko np. char tab[20], prawdopodobnie chodzi ci o indeksowanie tak jak w pętlach, że wszystko od 0. W tablicach 2-wymiarowych musisz mieć co najmniej [1][n] elementów.

0
newbie_c napisał(a):

... wiec gdzie przy kopiowaniu trafiaja stringi o indeksach wiersza > 0 ?

Można powiedzieć że trafiają do pseudo losowych komórek pamięci.
Mogą ci się nadpisać inne zmienne, może wyskoczyć "Access Violation" a może ci się sformatować dysk twardy - choć szansa na to dość mała,
a nawet - "może wysłać twoje nagie fotki na facebooka" (wg @Azarien, komentarz do postu niżej). :)

0

@_13th_Dragon sformatować dysk? I to na Windows 9x jest możliwe czy na czym? Już nie mówiąc o Linuxie...

#include <stdio.h>
#include <string.h>
int main(void) {
	char tab[1][1];
	strcpy(tab[0],"sformatuje Ci");
	strcpy(tab[100],"dysk! <zły>");
	printf("%s %s\n",tab[0],tab[100]);
	return 0;
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1