Svar 1... Hehe ;)
Du har i switch-blokken 5 sektioner:
case 1, case 2, case 3, case 4 og default, og så mente jeg bare hvorfor du havde default-sektionen, når den ikke lavede noget, men skidt med det :) Hehe
(Jeg elsker bare folks reaktioner når jeg engang imellem snakker totalt sort ;) LOL
Nå tid til at være seriøs igen:
Jeg er ked af at sige det, men strlen(servername) er heller ikke brugbar i den situation her.
strlen() fortæller hvor lang strengen er, og IKKE hvor meget hukommelse du har allokeret
Problem:
--------
Du har allokeret et char-array med 50 elementer.
Lad og sige at du har fyldt den med strengen \"
www.eksperten.dk\".Så vil strlen() returnere 16
Altså: Antal tegn og IKKE allokeret hukommelse (som du har brug for)
Forklaring:
-----------
Problemet er jo at du allokerer et array, men du har ingen anelse om hvad det indeholder, før du har kaldt getline().
Strlen() funktionen returnerer antallet af tegn, ved at lede efter et \'\\0\', og returnere \'\\0\'-tegnets position.
Dvs. når arrayet til at starte med indeholder noget ukendt, kan strlen() returnere hvad-som-helst, for du ved IKKE hvornår strlen() vil finde et \'\\0\' (Måske som første tegn, måske 20000 tegn fremme)
Det kan godt være det vil virke når du compilerer i Debug-mode (Hvis den fylder allokeret hukommelse med 0\'er), men det vil helt sikkert fejle i Release-mode (VisualC++)
Det der sker i dit tilfælde er: (Hvis du er så heldig at strlen() første gang returnerer 50)
Lad os sige at du i \'case 0\' indlæser en streng med 3 tegn. F.eks. \"ABC\"
I næste tilfælde (\'case 1\') bruger du IGEN \"strlen(servername)\", og den vil returnere længden af strengen \"ABC\" (Altså altid længen af den samme variabel), og getline() vil blive begrænset til at indlæse 3 tegn, osv. osv.
Nu siger jeg IKKE at det vil løse dit problem at du skriver strlen(<det rigtige variabelnavn>), for det vil det med garanti IKKE. Du skal vide hvor meget hukommelse der er allokeret, og det tror jeg ikke der er en funktion der kan fortælle dig.
Det blev vist noget af en rodet forklaring, så hvis du ikke kan følge mig, skal du bare sige til :)
BOTTOM LINE: Jeg vil tro at den eneste løsning er at du selv holder styr på hvor mange elementer der er plads til i arrayet, og skriver det som argument til getline(), i stedet for at bruge et funktionskald