Zugriffsverletzung: printf mit var[i] in Schleife
-
Hi,
habe hier eine Übung aus der Uni und bin fast fertig. Ich bekomme durch printf("Rest: %s\n", folge[i]); in Zeile 20 allerdings eine Zugriffsverletzung angezeigt. Genauer durch folge[i], wenn ich das ganze array nehme ist alles ok.
Das Programm soll die ersten 10 Zeichen eines Arrays speichern und den Rest dann auch ausgeben und zusätzlich(fehlt noch) die 10 Zeichen auf die Anzahl von Großbuchstaben und Ziffern prüfen? Wer mir dafür was sagen kann wäre auch cool.
Funktionen aus <string.h> wie strlen(), strcpy(), strstr() etc. dürfen nicht verwendet werden.
#include <stdio.h> #include <conio.h> void main(){ char folge[81] = { 0 }; // ein Element mehr für Endzeichen char speicher[11] = { 0 }; // ein Element mehr für Endzeichen int folgecount; int count; scanf("%s", folge); folgecount = printf("Folge: %s\n", folge) -8; printf("Anzahl: %d\n", folgecount); for(int i=0;i < 10 && i<=folgecount;i++){ speicher[i]=folge[i]; } count = printf("Speicher: %s", speicher) -10; printf("\nAnzahl: %d", count); if(folgecount > 10){ for(int i=11; i < folgecount;i++){ printf("Rest: %s\n", folge[i]); } } _getch(); }
-
%s erwartet einen String, folge[i] ist allerdings nur ein char. (Du musst %c nutzen.)
So, jetzt da das Problem gelöst ist, kann ich ja anfangen.
1. Bitte entscheide dich für eine Sprache. Vorzugsweise Englisch, aber "folgecount" liest sich unglaublich schrecklich.
2. conio.h gehört nicht zum Standard, nutze z.B. getchar()
3. Es heißt int main(void), der Rückgabetyp von main ist int!
4. scanf() gibt schon zurück wie viel eingelesen wurde, vielleicht hilft das?
4.1. Du solltest die maximal einzulesenden Zeichen bei scanf() begrenzen: scanf("%80s", ..);
5. Bitte einheitlich einrücken. (Hast du keine IDE?)#
-
printf()
erwartet bei%s
einen Zeiger auf eine Nullterminiertes char-Array.
Du übergibst mitfolge[i]
aber nur ein einzelnes Zeichen.
Wenn du nur das Zeichen ausgeben willst ist%c
der richtige Formatspecifier.
-
Da war doch noch was mit Großbuchstaben und Ziffern.
Schau mal die Funktionen aus der ctype.h an.