[c] probleme mit funktionen und rückgabewerten

wodka

Grünschnabel
Hallo zusammen :)

ich hab ein kleines Problem mit c, folgendes: ich schreibe gerade ein programm, das Dezimal Zahlen in römische zahlen umwandelt. Ich übergebe an die Funktion also eine Dezimalzhal, brauche als rückgabe Wert aber einen String. hier mal ein kleiner Auszug:

Code:
dec = atoi(argv[2]);
// Prüfung der Funktion
 if (!strcmp(argv[1],"dec2roe"))
      printf("Ergebnis: %s\n", dec2roe(dec));
  ...

char dec2roe(int dec) {
      
  // Fehler: Dezimalzahl größer als 3888
  if (dec > 3888) {
  	return("Zahl zu groß\n");
 }

der compiler meckert ständig:
"unteschiedliche Basistypen oder so... ich hab keine Ahnung wie ich es sonstmachen soll.

hoffe ihr könnt mir helfen
thx
 
Zuletzt bearbeitet:
ein char ist ein einzelner Buchstabe - das reicht nur für einen recht kurzen String

char[] wäre eine Verbesserung, du könntest so einen String mit Inhalt zurückgaben. (Habt ihr schon ein bisschen mit Pointern gearbeitet? Sonst sind Missverständnisse vorprogrammiert!)


Die schönste Lösung wäre es imo, C++: ein eigenes Stringobjekt zu verwenden (oder zumindest C: sich einen entsprechenden Datentyp zu basteln). Das würde die Sache leichter lesbar machen.
 
leider funktionierts nicht, wie es sollte:

char[] dec2roe(int dec) {
gibt er mir als syntaxfehler zurück

char* dec2roe(int dec) {
selbe Fehlermeldung wie zuvor

?! das ganze sollte eigetnlich so funktioniern wie oben geschildert.
aber danke erstmal :)
 
char* dec2roe(int dec)
gibt auch nur einen Zeiger auf ein char[] zurück - das char[] musst du vorher irgendwo erzeugen (und wenn du das dynamisch getan hast auch wieder zerstören)

Ich nehme an das ist eine Schulaufgabe?
Habt ihr Zeiger / dyn. Speicherverwaltung schon durchgenommen?



--
Ein Möglichkeit, einen String zurückzugeben:
PHP:
//Rückgabe eines String mit c's Mitteln

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char* ReturnAString(int a);
int main()
{
	char* TheString=NULL; /*Ein Zeiger auf Speicher, noch leer*/
	int Wert=54321;
	TheString=ReturnAString(Wert);
	printf("Die Zahl als String: %s",TheString);
	free(TheString); /*Den Speicher am Ende dem System zurückgeben*/

	return 0;
}

char* ReturnAString(int a)
{
	char* Temp;
	char x[80];
	sprintf(x,"%d",a);
	Temp=(char*)malloc((strlen(x)+1)*sizeof(char)); /*Speicher reservieren. Achtung, aufden Platz für den Terminator nicht vergessen!*/
	strcpy(Temp,x); /*Den String in den neuen Speicher kopieren*/
	return Temp; //die Speicheradresse zurückgeben
}
 
Zuletzt bearbeitet:
vielen Dank, jetzt gehts, das ganze ist fürs erste Semester informatik studium - aber ich bin noch weit weit am anfang!
Aber ich habs jetzt hinbekommen, ich versteh nur nicht ganz, warum die Funktion 2 mal deklariert wird, einmal vor der Funktion main und dann nochmal bei der eigentlichen definition... müßte es nicht reichen, wenn ich der funktion einmal sage, sie soll mir einen char zurückliefern???
 
warum die Funktion 2 mal deklariert wird

Der Compiler muss von jeder Funktion erst mal gehört haben bevor er weis wie er mit ihr im Laufe des Compilierens umgehen muss.
Würde der Compiler das komplette .cpp erst mal durcharbeiten, dann müsste man den Funktionskopf nicht nochmal oben hinschreiben.
(Man könnte auch die ganze Funktion an eine Stelle vor ihrem ersten Vorkommen innerhalb einer anderen Funktion stellen - bei grossen Daeien ist das unübersichtlich; bei einigen Rekursionen gänzlich unmöglich.)
 

Neue Beiträge

Zurück