Hallo versuche grade wieder in C einzusteigen und habe folgendes Problem.
Ich möchte einen String einlesen und die einzelnen Wörter einem temporären String übergeben. Jedoch versteh ich offensichtlich den Umgang mit Zeigern nicht richtig.
Folgender Code erzeugt die anschließende Ausgabe:
00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
S e r v u s d a s h i e r s o l l e i n T e s t s e i n X
Runde:0 Länge: 6 Start: 00 Ende: 06 Einzel:Servus strlen: 6 String: Servus
Runde:1 Länge: 3 Start: 07 Ende: 10 Einzel:das strlen: 3 String: das
Runde:2 Länge: 4 Start: 11 Ende: 15 Einzel:hier strlen: 6 String: hierus
Runde:3 Länge: 4 Start: 16 Ende: 20 Einzel:soll strlen: 6 String: sollus
Runde:4 Länge: 3 Start: 21 Ende: 24 Einzel:ein strlen: 3 String: ein
Runde:5 Länge: 4 Start: 25 Ende: 29 Einzel:Test strlen: 6 String: Testus
Runde:6 Länge: 4 Start: 30 Ende: 34 Einzel:sein strlen: 6 String: seinus
Die Ausgaebe zeigt mir, dass die einzelnen Wörter grundsätzlich in richtiger Länge dem char-Zeiger übergeben werden. Allerdings scheint dieser bei der Ausgabe auf noch zuvor allokierten Speicher zuzugreifen.
Kann mir jemand erklären warum das so ist?
Vielen Dank schonmal, fürs lesen bis hierhin
Ich möchte einen String einlesen und die einzelnen Wörter einem temporären String übergeben. Jedoch versteh ich offensichtlich den Umgang mit Zeigern nicht richtig.
Folgender Code erzeugt die anschließende Ausgabe:
Code:
#include <stdio.h>
#include <stdlib.h>
int main(void) {
char input[] = "Servus das hier soll ein Test sein X";
char output[40];
char mychar;
char *temp_string;
int i;
int j = 0;
int str_length;
int start = 0;
int ende = 0;
int length = 0;
for(i=0; i<strlen(input); i++)
{
printf("%02d ", i);
}
printf("\n");
for(i=0; i<strlen(input); i++)
{
printf(" %c ", input[i]);
}
printf("\n\n");
while(input[ende] != 'X')
{
while(input[ende] != ' ')
{
ende++;
}
length = ende-start;
temp_string = malloc(length*sizeof(char));
printf("Runde:%d\tLänge: %d\tStart: %02d\tEnde: %02d\tEinzel:", j, length, start, ende);
for(i = start; i<ende; i++)
{
temp_string[i-start] = input[i];
printf("%c", input[i]);
}
str_length = strlen(temp_string);
printf("\tstrlen: %d\t", str_length);
printf("String: %s\n", temp_string);
free(temp_string);
if(input[ende] != 'X')
{
start = ++ende;
}
j++;
}
return EXIT_SUCCESS;
}
00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
S e r v u s d a s h i e r s o l l e i n T e s t s e i n X
Runde:0 Länge: 6 Start: 00 Ende: 06 Einzel:Servus strlen: 6 String: Servus
Runde:1 Länge: 3 Start: 07 Ende: 10 Einzel:das strlen: 3 String: das
Runde:2 Länge: 4 Start: 11 Ende: 15 Einzel:hier strlen: 6 String: hierus
Runde:3 Länge: 4 Start: 16 Ende: 20 Einzel:soll strlen: 6 String: sollus
Runde:4 Länge: 3 Start: 21 Ende: 24 Einzel:ein strlen: 3 String: ein
Runde:5 Länge: 4 Start: 25 Ende: 29 Einzel:Test strlen: 6 String: Testus
Runde:6 Länge: 4 Start: 30 Ende: 34 Einzel:sein strlen: 6 String: seinus
Die Ausgaebe zeigt mir, dass die einzelnen Wörter grundsätzlich in richtiger Länge dem char-Zeiger übergeben werden. Allerdings scheint dieser bei der Ausgabe auf noch zuvor allokierten Speicher zuzugreifen.
Kann mir jemand erklären warum das so ist?
Vielen Dank schonmal, fürs lesen bis hierhin
