Forum: PC-Programmierung Vektor size über Funktion bestimmen in C


von Tom (Gast)


Lesenswert?

Hallo, ich habe folgendes Problem. Mit dem nachfolgenden Programm möchte 
ich einen Vektor einlesen und die Laenge(mit Hilfe einer Funktion) von 
ihm bestimmen. Es liefert auch für einen Vektor von Groesse 1-7 das 
richtige Ergebnis aber wenn ich für size=8,9,10 eingebe, wird immer 11 
angegeben. Woran kann das liegen?
1
#include <stdio.h>
2
#define max 10
3
4
int einlesen(char x[max]){
5
    int anzahl_zeichen;
6
    anzahl_zeichen = strlen(x);
7
    return anzahl_zeichen;
8
}
9
10
int main(void){
11
    int i,size;
12
    char b[max];
13
    printf("Einen Vektor mit max %d Zeichen eingeben!\n", max);
14
    printf("Wie viele Einträge wollen sie eingeben?\n");
15
    scanf("%d", &size);
16
    for(i=0;i<size;i++){
17
        printf("b[%d] = ",i);
18
        scanf("%c\n", &b[i]);
19
    }
20
21
    printf("Länge des eingegebenen Vektors:%d ", einlesen(b));
22
23
}

Ich hoffe jemand kann mir weiterhelfen.
Vielen Dank!
Viele Grüße, Tom

von Joachim D. (Firma: JDCC) (scheppertreiber)


Lesenswert?

Dein String (b[max]) ist als char-array mit 10 Elementen (Bytes)
angelegt. Mehr Platz hat er nicht. Du schreibst aber 11 Zeichen
hinein.

Ergebnis: Der Platz reicht nicht mehr und die Zeichen mit einem
Index > 9 landen vermutlich im Nirvana. Das Resultat ist nicht mehr
definierbar ...

von Karl H. (kbuchegg)


Lesenswert?

Zusätzlich:
Damit du strlen benutzen kannst, MUSS im Array nach dem letzten von dir 
benutzten 'Zeichen' ein \0 Zeichen kommen. So sind Strings in C 
definiert: eine Abfolge von Zeichen bis zum \0.
Das bei dir da zufällig im Array an manchen Stellen eine binäre 0 steht, 
ist genau das: Zufall.

String-Verarbeitung in C

von Tom (Gast)


Lesenswert?

Bei Index = 8, tritt es auch schon auf. Soll ich b dann einfach 
vergrößern? char b[max+1]

von Tom (Gast)


Lesenswert?

Ok, ich habs. Danke euch! Habe jetzt einfach das Element b[size+1] mit 
'\0' belegt und b erhöht b[max+1].

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.