Problem mit arrays
-
Hallo Leute! Ich bin neu hier und will die Möglichkeit des Forums nutzen um nützliche Tips von erfahrenen Programmierern zu erhahalten.
Mein derzeitiges Problem ist das Folgende:
Ich möchte ein Wort von max. 16 Elementen einlesen und dieses dann mit * auffüllen. Zweck des Ganzen soll letztendlich sein, ein kleines Verschlüsselungsprogramm zu schreiben. Jedenfalls bricht das Programm ab. Und ich weiß nicht warum! Bitte schaut euch das mal an:/*Verschlüsselungsprogramm*/
#include<stdio.h>
#include<string.h>int main()
{
int i,x;
char wort[16];
char stern[16];printf("\nGeben Sie ein Wort ein.\n\n");
fflush(stdin);
gets(wort);i = 16 - strlen(wort); //Bestimmung der Anzahl der *
for(x=0;x<i;x++)
printf("\nstern lautet nun:\n\n",stern);
for(x=0;x<i;x++)
printf("%c",stern[x]); //Hier:Programmabbruch!?strcat(wort,stern);
printf("\nDas Wort lautet nun aufgefuellt:\n%s\n\n",wort);return 0;
}
-
Hi!
Ganz kurz für die Zukunft:
- Du kannst (solltest) deinen Code in cpp-Tags einschließen, damit er schön formatiert und 'gesyntaxhiglightet' wird (Der C/C++-Button unter den Smileys).
- Wenn du eine Fehlermeldung bekommst, ist es immer ratsam, sie hier auch zu posten.
So, ein Fehler ist schon mal, dass du 'stern' nicht mit Nullen initialisierst. Das sorgt dafür, dass strcat viel mehr liest und viel mehr an 'wort' anhängt, als es eigentlich dürfte. Denn strcat hört erst auf, wenn es eine 0 findet (String-Ende-Zeichen in C). Ändere deine Deklaration einfach in Folgendes:
char stern[16]={0};
So werden alle 16 Elemente von 'stern' mit einer 0 initialisiert. Wenn du später deine Sterne reinschreibst, ist sichergestellt, dass der String nullterminiert ist, solange du nicht 16 Sterne oder mehr schreibst (das musst du auch verhindern, indem du z.B. dem Benutzer sagst: "Wort zu lang! Bitte ein kürzeres eingeben.").
EDIT: Und 'wort' ist zu klein! Das strcat am Ende schreibt ein Zeichen zuviel rein. Du musst immer an die terminierende Null bei C-Strings denken. wort[17] dürfte für's erste reichen. Du kannst aber auch ruhig mehr Speicher veranschlagen (besser zuviel als zu wenig!). Ein wort[255] tut keinem weh.
EDIT2: Und das hier:
printf("\nstern lautet nun:\n\n",stern);
muss eigentlich nur das hier sein:
printf("\nstern lautet nun:\n\n");
Du verwendest nirgendwo %s, so dass dein letzter Parameter sowieso ignoriert wird.
-
So ist's viel cooler:
char stern[16]="";
oder wenn man vor hat dort 16 Zeichen zu speichern, dann halt noch +1 für die Nullterminierung:
char stern[16+1]="";
mFg
-
Was cool ist und was nicht, ist zum Glück Ansichtssache.