funktion die das dest. array dynamisch erweitert. Aber es will nicht :(
-
OK, einfachere Aufgabe.
void f(int a) { a = 5; printf("%d", a); // Ausgabe 5 } int main() { int a = 0; printf("%d", a); // Ausgabe 0 f(a); printf("%d", a); // Ausgabe 0 }
Wieso ist a am Ende nicht 5? Es wird doch in f() verändert?
-
anfaenger123 schrieb:
Versteh dein Beispiel aber die frage bleibt!
Na, anscheinend nicht ganz, wenn die Frage bleibt.
In deiner Funktion InitAddStrToDynMem erstellst du mit calloc einen Speicherbereich und bekommst dessen Adresse zurück, welche du als Wert des Zeigers ptrdynmem speicherst. Damit überschreibst du ptrdynmem, welcher zuvor als Wert NULL von memptr hatte. Da bei Aufruf von InitAddStrToDynMem lediglich der Wert memptr auf ptrdynmem kopiert wurde, hat sich an memptr gar nichts geändert.Zum Ändern eines Wertes ausserhalb der Funktion sollte diese dessen Adresse bekommen und darüber den Speicherbereich, auf den die Adresse verweist, verändern. Dies gilt auch, wenn der Speicherbereich ein Pointer ist, welcher eine Adresse enthält.
-
Na so:
#include <stdlib.h> #include <stdio.h> void f(int **a) //zeiger auf zeiger auf int { static int p = 1; *a = &p; printf("%d\n", **a); } int main(void) { int c = 5; int *b = &c; printf("%d\n", *b); f(&b); printf("%d\n", *b); return EXIT_SUCCESS; }
denn du willst ja den wert des Zeigers ändern und nicht den wert von dem auf das der Zeiger zeigt
-
Ey, jetzt macht ihr meine pädagogisch wertvolle Herangehensweise kaputt.
-
Jetz gehts
#include <stdio.h> #include <stdlib.h> #include <string.h> int InitAddStrToDynMem(char **ptrdynmem); int AddStrToDynMem(char **ptrdynmem ,const char *srcstr); void FreeAddStrToDynMem(char **ptrdynmem); int main(void) { char *memptr = NULL; char str[] = {"hey"}; InitAddStrToDynMem(&memptr); AddStrToDynMem(&memptr ,"HALLO"); AddStrToDynMem(&memptr ,"12345"); AddStrToDynMem(&memptr ,"67890"); AddStrToDynMem(&memptr ,str); printf("%s",memptr); FreeAddStrToDynMem(&memptr); getchar(); return 0; } int InitAddStrToDynMem(char **ptrdynmem) { *ptrdynmem = (char *) calloc(1 ,sizeof(char)); if(*ptrdynmem == NULL) return 0; return 1; } int AddStrToDynMem(char **ptrdynmem ,const char *srcstr) { size_t currentlen = 0 ,srcstrlen = 0; currentlen = strlen(*ptrdynmem); srcstrlen = strlen(srcstr); *ptrdynmem = (char *) realloc(*ptrdynmem ,currentlen+srcstrlen+1); if(*ptrdynmem == NULL) return 0; memcpy(*ptrdynmem+currentlen ,srcstr ,srcstrlen+1); return 1; } void FreeAddStrToDynMem(char **ptrdynmem) { free(*ptrdynmem); return; }
-
...
-
Ja ich weiss bei C ist das nicht notwendig. Oder?
-
...
-
Wäre es falsch und wen was wären die Probleme die es geben würde... möchte nicht auf den Pointer gehen möchte es nur Verstehen.
-
...