Char in Funktion übergeben und ändern

Gast #1609612
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
}
Gast #1609625
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.
Persönliche Seite #1609631
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.
#1609637
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren