Char Zeiger richtig übergeben

kurcob

Mitglied
Morgen..

habe folgendes Problem... möchte einen Char Zeiger an eine Funktion übergeben. In der Funktion wird dieser dann befüllt und in der Main soll dann der Inhalt ausgegeben werden. Was mache ich denn noch falsch?
Code:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int test(char *inhalt) {
	   char buffer[10];
   inhalt= buffer;
   strcpy(inhalt, "testwert");

}

int main(int argc, char **argv) {

	char *zeiger;
	test(zeiger);
	printf("%d\n",zeiger);
	return EXIT_SUCCESS;
}
 
Zuletzt bearbeitet:
1: Einen String kannst du nicht mit %d ausgeben! Nimm
puts(zeiger);
2: In der Funktion weist du den buffer inhalt zu.
Das wirkt (so) aber nur in der Funktion-der zeiger in main kriegt nichts von seinem neuen Wert mit
3 Auch wenn 2 funktionieren würde, wird am Ende der Funktion buffer gelöscht-
Da gibts dann nichts mehr zum ausgeben.
Du müsstest den Buffer im Main anlegen

Korr. Version:
C++:
int test(char *inhalt) {
   strcpy(inhalt, "testwert");
}

int main(int argc, char **argv) {

	char zeiger[10];
	test(zeiger);
	puts(zeiger);
	return EXIT_SUCCESS;
}
 
Hallo,

@sheel
Man kann den char Zeiger auch so anlegen.
C++:
int test(char *inhalt) {
   strcpy(inhalt, "testwert");
}
 
int main(int argc, char **argv) {
 
    char* zeiger; // <- hier
    test(zeiger);
    puts(zeiger);
    return EXIT_SUCCESS;
}
So ist man bei der länge nicht auf 10 Zeichen begrenzt.

@kurcob
Das strcpy übernimmt die Speicherallocierung (soweit ich weiß).

MfG Turri
 
Doch, natürlich
Aber dann kommen mehr Pointer dazu :)

C++:
void test(char **inhalt) {
   *inhalt=(char *)malloc(10);
   strcpy(*inhalt, "testwert");
}

int main(int argc, char **argv) {

	char *zeiger;
	test(&zeiger);
	puts(zeiger);
	free(zeiger);
	return EXIT_SUCCESS;
}

Ohne malloc vielleicht noch, ist aber für größere Programme ungünstig:
C++:
void test(char **inhalt) {
   static char arr[10];
   *inhalt=arr;
   strcpy(*inhalt, "testwert");
}

int main(int argc, char **argv) {

	char *zeiger;
	test(&zeiger);
	puts(zeiger);
	return EXIT_SUCCESS;
}

@Turri: Tut mir leid, wenn das unfreundlich klingt, aber das ist Schwachsinn.
strcpy übernimmt KEINE Speicherverwaltung
Kompiliers doch einmal...
 
Zuletzt bearbeitet:
:eek::suspekt:
Welchen Compiler denn?
Das ist jetzt sehr seltsam:confused:

PS: Welches OS hast du denn?
Dürfte eigentlich nicht so laufen
 
Hallo,

also das ist das Programm.
C++:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void test(char *inhalt) {
   strcpy(inhalt, "testwert");
}

int main(int argc, char* argv[])
{
    char* zeiger;
    test(zeiger);
    puts(zeiger);
    system("pause");
}
Nutze Windows XP Professional + SP3
Habe gerade gerade Borland C++ Builder6.
Konsolenanwendung.

Mfg Turri
 
Also bei mir (WinXP SP2,VC)
läufts sogar auch-aber nicht im Debugmodus :-)
Das ist dann wohl Glück, das das so funktioniert
Könnte aber bei größeren Programmen schwer zu findende Fehler geben

Jedenfalls macht strcpy 100% keine Speicherverwaltung, könnte es hier auch gar nicht
Der zeiger im main kriegt nämlich nichts von seinem neuen Wert mit.
 
Zurück