Forum: PC-Programmierung Char in Funktion übergeben und ändern


von Thomas M. (Gast)


Lesenswert?

Hallo,

wie kann ich in eine Funktion ein char übergeben und diesen in der 
Funktion ändern?
Mit int usw ist es mir klar, dass ich die Adresse mit zB
1
foo(&i)
übergebe, aber wie mache ich es mit Zeichenketten?

Anbei mein Versuchsprogramm. Der String "neuer Text" wird nicht mehr im 
Hauptprogramm ausgegeben.
1
// Konsolenanwendung.cpp : Definiert den Einstiegspunkt für die Konsolenanwendung.
2
//
3
#include "stdafx.h"
4
#include "iostream"
5
6
using namespace std;
7
8
void inttochar(int i,char *ch)
9
{
10
 cout << "\nFunktion InttoChar Wert: " << ch << "\n";
11
 ch="neuer Text";
12
 cout << "Adresse: " << &ch << "\n";
13
 cout << "Funktion InttoChar Wert: " << ch << "\n\n";
14
}
15
16
17
int _tmain(int argc, _TCHAR* argv[])
18
{
19
  char *c = "alter Text";
20
  
21
  int i = 67;
22
  cout << "Wert von i: " << i << "\n";
23
24
  inttochar(i,c);
25
26
  cout << "Wert vom String: " << c <<"\n";
27
  cin >> i;
28
29
  return 0;
30
}

von Peter (Gast)


Lesenswert?

wenn du schon die std verwendest kannst du auch gleich ein string 
nehmen.

Wenn du es mit char* machen willst, dann darfst du das hier nicht machen

ch="neuer Text";

dafür müsstest du z.b. strcpy( ch, "neuer Text" ) verwenden, dabei musst 
du aber aufpassen das du nur soviel text speichest (Kopierst) wie die 
Platz in dem Zeiger hast.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Es geht nicht um Zeichenketten, es geht um Pointer.

Du bist schon recht nahe dran; um ein Objekt zu verändern, musst Du 
dessen Adresse übergeben. Egal, was für eine Art von Objekt das ist.

Also musst Du die Adresse des Pointers übergeben:
1
void bla(char **ch)
2
{
3
  *ch="neuer Text";
4
}
5
6
...
7
8
char *c = "alter Text";
9
  
10
bla(&c);

Beachte, daß es hier um Pointer geht, die auf Strinkonstanten zeigen, 
aber nicht um die Zuweisung oder gar Änderung von Zeichenketten.

von Karl H. (kbuchegg)


Lesenswert?

Rufus t. Firefly schrieb:

> Beachte, daß es hier um Pointer geht, die auf Strinkonstanten zeigen,
> aber nicht um die Zuweisung oder gar Änderung von Zeichenketten.

Und genau aus dem Grund sollte man auch anfangen const-Korrekt zu 
programmieren.
1
void inttochar(int i,char *ch)
2
{
3
 cout << "\nFunktion InttoChar Wert: " << ch << "\n";
4
5
 strcpy( ch, "neuer Text" );
6
7
 cout << "Adresse: " << &ch << "\n";
8
 cout << "Funktion InttoChar Wert: " << ch << "\n\n";
9
}

würde nämlich compilieren, obwohl es in diesem Zusammenhang völlig 
falsch ist!

Auch ein
1
int _tmain(int argc, _TCHAR* argv[])
2
{
3
  const char *c = "alter Text";
4
  
5
  int i = 67;

wäre nicht verkehrt gewesen.
1
void inttochar(int i, const char *ch)
2
{
3
 cout << "\nFunktion InttoChar Wert: " << ch << "\n";
4
5
 strcpy( ch, "neuer Text" );
6
7
 cout << "Adresse: " << &ch << "\n";
8
 cout << "Funktion InttoChar Wert: " << ch << "\n\n";
9
}

hingegen würde nicht compilieren. Das const fängt den Fehler ab.
1
void bla( const char **ch)
2
{
3
  *ch="neuer Text";
4
}

compliert natürlich auch und ist auch korrekt.

von Thomas M. (Gast)


Lesenswert?

Danke an euch, besonders an Rufus!!

Das ist ein Teil eines Programms, welches mal auf einem uC laufen soll. 
Daher kann ich nicht alle C++ Funktionen benutzen.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.