Portál AbcLinuxu, 30. dubna 2025 14:23
Tiskni
Sdílej:
odpoved=(char*)malloc(sizeof(char)*256); ... for (i=0;i<=256;i++) if (odpoved[i]=='\n') odpoved[i]='\0';Stane se, no...
Nerozumiem presne co si tym chcel povedat, alebo to mam ku tvojej spokojnosti prepisat takto:
#define DLZKA
odpoved=(char*)malloc(sizeof(char)*DLZKA);
...
for (i=0;i<=DLZKA;i++)
if (odpoved[i]=='\n') odpoved[i]='\0';
!=
... přece si to budeme pamatovat, že mez je o jednu menší ... já si to nikdy nepamatuji, proto raději používám "nerovná se" select
se vám nelíbil?
help select
# select ano in ano nie; do echo napisal si $REPLY; break; done 1) ano 2) nie #? 2 napisal si 2
asi este stale nechapem, ako spravit aby ked dam 2 napisalo "napisal si nie"
select ano in ano nie; do echo napisal si $REPLY; break; done 1) ano 2) nie #? nie napisal si nie??
REPLY=`question "Otazka" -nodefault ano nie; echo napisal si $REPLY Otazka (ano/nie): anoo (akoze preklep) Otazka (ano/nie): ano napisal si anoNieje to lepsie?
REPLY
použít tu proměnnou, do které jste si výsledek nechal uložit, tedy ano
?
select name in ano nie; do if [[ ! -z $name ]]; then echo napisal si $name break fi done 1) ano 2) nie #? 3 #? 4 #? 5 #? 2 napisal si nie semo@nb ~ $
select ano in ano nie; do echo napisal si $REPLY; break; done 1) ano 2) nie #? 3 napisal si 3
hmm... nieje to to prave orechove...
ano
, číslo v REPLY
.
1. Na buffer overflow už jste byl upozorněn.
2. Nikde nevidím, že byste dealokoval pointer, který jste dostal malloc()
. Jistě, systém to po vás uklidí, ale po vzoru klasika bych řekl: "To neděláš dobře, Jaromíre, jednou se ti to vymstí."
3. Parsování parametrů je velmi chaotické a neošetřuje spoustu situací, se kterými jste nepočítal. Např. pokud je použit přepínač '-nodefault
', je '-nodefault
' považováno i za platnou odpověď.
4. Vyžadovat, aby byl přepínač až za argumentem je dost neobvyklé a v tomto případě neopodstatněné.
5. Nemíchejte odsazování mezerami a tabulátory.
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.