[C] funktion soll char array übernehmen und zurückgeben

lostink

Grünschnabel
hallo!

ich verstehe nicht wo mein fehler liegt!

ich habe eine funktion die einen string annimmt, dort den string tokenized und in ein char array "stückelt". theoretisch.
nur leider stürzt es ab, mein pointer-wissen liegt ein paar jährchen zurück...


Code:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char *tokenizer(char *str) {

	int size_array = sizeof(strtok(str, " "));

	printf("%d tokens \n\n", size_array);

	char *test[size_array];

	int i;

	if (size_array > 0) {

		test[0] = strtok(str, " ");

		for (i = 1; i < size_array; i++) {
			test[i] = strtok(NULL, " ");

		}
	}
	return test;
}


int main(void) {

	char str[] = "this is a test";
	printf("%s\n", str[0]);
	char *bla = tokenizer(str);

	int i;

	for (i=0; i<sizeof(bla);i++) {
		printf("%s\n", bla[i]);
	}

	system("pause");
	return 0;
}
//}
 
Ich glaub du meinst
C:
strlen()
und nicht
C:
sizeof()

Denn zweiteres liefert dir die Anzahl an Bytes, die der char-Pointer einnimmt und nicht die Länge des Strings.
 
Ja das sieht man, dass du schon einige Zeit raus bist. Du kennst nicht/hast vergessen den Unterschied zwischen String und Stringarray, Ersteres wäre char*, Letzteres wäre char**.
So würde es z.B. funktionieren:
C:
char **tokenizer(char *str, size_t *groesse) {

    char **test=0, *p=strtok(str," ");
    for(;p;p=strtok(0," "))
    {
      test=realloc(test,++*groesse*sizeof*test);
      test[*groesse-1]=p;
    }
    return test;
}


int main() {

    size_t i, groesse=0;
    char **bla, str[] = "this is a test";
    printf("%s\n", str);
    bla = tokenizer(str,&groesse);

    for (i=0; i<groesse;i++) {
        printf("%s\n", bla[i]);
    }
    realloc(bla,0);

    return 0;
}
 
Zurück