Portál AbcLinuxu, 9. května 2025 02:59
int main(void){
int i;
i = 0;
int vstup;
scanf("%d", &vstup);
for(int r[i]; r[i] < vstup; i++){
r[0] = 5;
printf("%d", r);
}
return 0;
}
Nevite proc? Nema to zadny vystup, ale mel by tam byt printf("%d", r);
------------------------------------------------------------------------
Nefunguje ani tohle. Ale tohle alespon neco vypise. (vypise to nulu)
int main(void){
int i,r;
i = 0;
int vstup;
scanf("%d", &vstup);
for(int r[i]; i < vstup; i++)
r[0] = 5;
printf("%d", r);
return 0;
}
Řešení dotazu:
int r[i];vytvoří na zásobníku neinicializované pole nulové velikosti (to je samo o sobě dost pochybné). Takže hned první podmínka v tom for-cyklu udělá sáhne do neinicializované části zásobníku. Výsledek je náhodný, ale s větší pravděpodobností se cyklus hned ukončí... Celkově ten cyklus nemůže udělat nic smysluplného. To r uvnitř cyklu nemá nic společného s r vně cyklu, je to nová proměnná!
Nevím jak to souvisí s bitovým polem, ale první i druhé je dost blbě, deklaruješ pole nulové délky int r[i]
(bo i = 0
)
a pak přistupuješ na jeho první prvek
r[i]
A dokonce tam chceš zapisovat za pseudo-náhodných podmínek
r[0] = 5
Deklarací r
v prvním řádku je zbytečná, r
není nikde použito, a zapisujete do nealokovaného prostoru při zadání vstupu >= 0.
Něco vypíše, protože je tam printf, který se provede vždy na rozdíl od prvního příkladu.
Jen matně hádám čeho chceš docílit, takže nemůžu napsat jak to má být…
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.