Forum: PC-Programmierung Rückgabewert von Funktion ausgeben


von keystone (Gast)


Lesenswert?

Ich habe eine Frage zu bei der Programmierung mit C++
1
void function(char *in)
2
{
3
 in[]="Eingabe";
4
5
return;
6
}
7
8
int _tmain(int argc, _TCHAR* argv[])
9
{
10
    
11
  char line[];
12
  
13
        fuction(line);
14
  
15
16
17
  
18
  
19
  return 0;
20
}

Ich möchte den String "Eingabe" in der Mainfunktion als Printf ausgeben.
Wie gekomme ich das hin?

Gruß und danke

von troll (Gast)


Lesenswert?


von keystone (Gast)


Lesenswert?

1
char *function(char *in)
2
{
3
 in[]="Eingabe";
4
5
return in;
6
}
7
8
int _tmain(int argc, _TCHAR* argv[])
9
{
10
    
11
char out[10];  
12
char line[];
13
  
14
        fuction(line);
15
  function(out)
16
17
18
  
19
  
20
  return 0;
21
}

So geht es aber leider auch nicht. Kann mir jemand sagen wo mein Probelm 
ist?

von Rolf Magnus (Gast)


Lesenswert?

keystone schrieb:

> So geht es aber leider auch nicht. Kann mir jemand sagen wo mein Probelm
> ist?

In deinem Code sind ziemlich viele Probleme. Am besten legst du "rohe" 
Arrays aus char gleich mal zur Seite und benutzt std::string 
stattdessen. Wenn du der Funktion als Parameter eine Referenz spendierst 
(das ist das &), dann kannst du es so schreiben:

#include <string>

void function(std::string& in)
{
    in = "Eingabe";
}

int main()
{
    std::string line;
    fuction(line);
    return 0;
}

keystone schrieb:
> Ich möchte den String "Eingabe" in der Mainfunktion als Printf ausgeben.
> Wie gekomme ich das hin?

Statt printf() benutzt du am besten std::cout. Das kann mit der Klasse 
string umgehen.

von keystone (Gast)


Lesenswert?

1
void function(char *in)
2
{
3
 in[]="Eingabe";
4
5
return;
6
}
7
8
int _tmain(int argc, _TCHAR* argv[])
9
{
10
    
11
  char line[];
12
  
13
        fuction(line);
14
  
15
16
17
  
18
  
19
  return 0;
20
}
Ich würde aber gernde die Codezeile
1
void function(char *in)

nicht verändern wollen, geht das dann auch?

von Christopher C. (Gast)


Lesenswert?

Was Du da machst ist nicht C++ sondern C.

von kopfkratzer (Gast)


Lesenswert?

Schonmal im Stroustrup nachgelesen S.266 ff ?
Du könntest uch mal hier nachsehen:
http://pages.cs.wisc.edu/~cs368-2/CppTutorial/NOTES/STRING.html
Und hier gibt's dann auch nochmal eine Übersicht:
http://www.cplusplus.com/reference/string/string/

von Karl H. (kbuchegg)


Lesenswert?

Christopher C. schrieb:
> Was Du da machst ist nicht C++ sondern C.

Das ist noch nicht mal C.
Das ist von C soweit entfernt, wie eine Fleischereifachverkäuferin von 
einem Herzchirurgen.

von Rolf Magnus (Gast)


Lesenswert?

keystone schrieb:
> Ich würde aber gernde die Codezeile
>
> void function(char *in)
>
> nicht verändern wollen, geht das dann auch?

Wie schon gesagt: Das macht man in C++ so nicht. Gehen würde es aber. Du 
mußt dann in function() mit strcpy den Inhalt in deinen Zielstring 
kopieren. Der Aufrufer muß sicherstellen, daß das Array, das er an 
function() übergibt, groß genug ist, um den gesamten Text und das 
abschließende \0 auch aufzunehmen.

von keystone (Gast)


Lesenswert?

Hallo ich dachte es geht vielleicht ohne strcpy

von troll (Gast)


Lesenswert?

keystone schrieb:
> Hallo ich dachte es geht vielleicht ohne strcpy
Erst den Prototypen nicht verändern, jetzt ohne strcpy, was kommt als 
nächstes?

http://www.mikrocontroller.net/articles/Netiquette#Klare_Beschreibung_des_Problems 
Was hast du genau vor? Was soll das werden?

>Das ist noch nicht mal C.
>Das ist von C soweit entfernt, wie eine Fleischereifachverkäuferin von
>einem Herzchirurgen.
Sowas dachte ich mir vorhin auch, hab es mir aber verkniffen zu 
posten...

von keystone (Gast)


Lesenswert?

Hallo danke für die vielen Beiträge. Ich habe es Rausgefunden.


Ohne string.h und ohne strcpy.


Ich hab doch gewusst das da bei Arrays was besoderes ist!!!


Gruß

von Wegstaben V. (wegstabenverbuchsler)


Lesenswert?

keystone schrieb:
> Hallo danke für die vielen Beiträge. Ich habe es Rausgefunden.
>
>
> Ohne string.h und ohne strcpy.
>
>
> Ich hab doch gewusst das da bei Arrays was besoderes ist!!!
>
>
> Gruß

und wie genau sieht jetzt deine Lösung aus?

Nur: ällebätsch, ich habs jetzt rausgefunden, ist "blöde" für den 
nächsten, der was lernen möchte ...

von Karl H. (kbuchegg)


Lesenswert?

Wegstaben Verbuchsler schrieb:
> keystone schrieb:
>> Hallo danke für die vielen Beiträge. Ich habe es Rausgefunden.
>>
>>
>> Ohne string.h und ohne strcpy.
>>
>>
>> Ich hab doch gewusst das da bei Arrays was besoderes ist!!!
>>
>>
>> Gruß
>
> und wie genau sieht jetzt deine Lösung aus?


Hmm.
Ich bin mir nicht sicher, ob ich das überhaupt wissen will.


> Nur: ällebätsch, ich habs jetzt rausgefunden, ist "blöde" für den
> nächsten, der was lernen möchte ...

Der sollte sich sowieso besser an den bereits weiter oben verlinkten
http://www.mikrocontroller.net/articles/String-Verarbeitung_in_C#wie_schreibt_man_eine_Funktion.2C_die_einen_String_liefert.3F
halten, als an ein Codebeispiel eines 'C++ - Programmierers', dem nicht 
klar ist, was an
     char line[];
das Problem darstellt.

von keystone (Gast)


Lesenswert?

Dann entschuldige ich mich hier und liefere meine Lösung.

Mein Probelm bestand darin ein Array an eine Funktion zu übergeben, in 
der Funktion etwas in das Array zu schreiben und in der Main- Fkt über 
ein Printf das Array auszulesen und den Inhalt der in der Funktion in 
das Array geschrieben wurde dort auszugeben.

Die Lösung liegt im Sonderfall eines Array. Beim Array wird die 
Parameterübergabe immer mit referenciert übergeben (Zeiger).

Das bedeutet die Funktion bleibt wie oben beschrieben gleich zu beginn 
dieses Treads.

Die Ausgabe erfolt so:
1
define ARR 10;
2
char line[];
3
4
for(i=0;i<ARR;i++){
5
6
prinft("%c",line[i]);
7
}
8
funktion(line)
9
10
for(i=0;i<ARR;i++){
11
12
prinft("%c",line[i]);
13
}
Gruß

von troll (Gast)


Lesenswert?

Der Code compiliert garantiert nicht. Soll das C sein?

von troll (Gast)


Lesenswert?

Oder anders gesagt: Code nicht abtippen sondern kopieren. Dann klappt es 
auch mit dem printf.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

keystone schrieb:
> Die Ausgabe erfolt so:

... gefolgt von vor Tipp- und Flüchtigkeitsfehlern nur so strotzenden 
dahingerotzem "Sourcecode".

Nee. So wird das nichts.

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.