[C] String übergeben
Hallo!
Folgender Code:
Sollte eigentlich das Umwandeln von dezimal nach binär als Funktion ermöglichen... Zurück kommt allerdings nur ein merkwürdiger Zeichensalat (is das ne Speicheradresse?).
Was klappt da nicht?
Folgender Code:
|
|
Quellcode |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
#include <stdio.h>
char* binary(int DezZahl)
{
char out[7];
int i;
for ( i = 0 ; i >= 7 ; i++)
{
out[i]=((DezZahl&(1<<i)) ? '1':'0');
}
char *giveout=out;
return giveout;
}
void main (void)
{
int DezZahl;
printf ("\nBitte Zahl eingeben ( 0 - 255 ) : ");
scanf ("%d", &DezZahl);
printf ("\n\n%d ist in Binärdarstellung %s \n\n",DezZahl,binary(DezZahl));
}
|
Was klappt da nicht?
http://www.FireflySeason2.com
Sie wird wieder fliegen!!
Sie wird wieder fliegen!!
dein "String" ist nicht nullterminiert...
untested...
|
|
Quellcode |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
#include <stdio.h>
char* binary(int DezZahl)
{
char out[8];
int i;
for ( i = 0 ; i > 7 ; i++)
{
out[i]=((DezZahl&(1<<i)) ? '1':'0');
}
out[8] = '\0';
return &giveout;
}
|
untested...
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »narfnarf« (17. Mai 2004, 22:40)
Und wie funktioniert das hier:
?
Und wie kann ich meinen code abändern dass es geht?
edit: warst schneller.. teste eben..
char *giveout=out;
Die Zeile hab ich bei deinem code einfach mal noch reingesetzt weil giveout bei dir nich gesetzt war. Geht aber immer noch nicht, kommt jetzt ein noch komischerer fehler den ich noch nie gesehen hab:
The Value of ESP was not properly saved across a function call. This is usually a result of calling a function declared with one calling convention with a function pointer declared with a different calling convention.
AHA, ja dann..
|
|
Quellcode |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
#include<stdio.h>
char* zeichen (void)
{
char string[200];
char *rueck;
printf ("\n\nBitte ein Wort eingeben : ");
scanf ("%s",&string);
rueck = string;
return rueck;
}
void main (void)
{
printf("\n\nSie gaben ein : %s\n\n",zeichen());
}
|
Und wie kann ich meinen code abändern dass es geht?
edit: warst schneller.. teste eben..
char *giveout=out;
Die Zeile hab ich bei deinem code einfach mal noch reingesetzt weil giveout bei dir nich gesetzt war. Geht aber immer noch nicht, kommt jetzt ein noch komischerer fehler den ich noch nie gesehen hab:
The Value of ESP was not properly saved across a function call. This is usually a result of calling a function declared with one calling convention with a function pointer declared with a different calling convention.
AHA, ja dann..
http://www.FireflySeason2.com
Sie wird wieder fliegen!!
Sie wird wieder fliegen!!
Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »Dimitri« (17. Mai 2004, 23:01)
Zitat
Original von Dimitri
[...]
char *giveout=out;
[...]
sollte auch
return out;
heissen...tschuldige...
dann gehts auch ohne extra murks...
interessante fehlermeldung...was für einen compiler verwendest du denn?
BTW, deinen extra Pointer zum zurückgeben kannst du dir sparen. Ein "String" in C ist ein Pointer auf Char, also char*. Das da noch was hinter kommt ist erstmal wurscht...also kannst du wenn der Rückgabewert char* ist auch direkt ein mit char string[10]; erstellten String mit return string; zurückgeben...
|
|
Quellcode |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
#include<stdio.h>
char* zeichen (void)
{
char string[200];
// Hinfort damit!
// char *rueck;
printf ("\n\nBitte ein Wort eingeben : ");
// Warum die Adresse des Zeigers auf den String? Muss da nicht ein Zeiger übergeben werden?
// string ist ja schon ein Zeiger...
// scanf ("%s",&string);
scanf("%s", string);
return string;
}
void main (void)
{
printf("\n\nSie gaben ein : %s\n\n",zeichen());
}
|
wieder untested...
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »narfnarf« (17. Mai 2004, 23:21)
Compiler ist MS Visual C++ 6.0
Ist string in dem Beispiel nicht ein Array? Ich dachte immer ich muss bei scanf das & angeben, damit das Eingelesene in die Adresse geschrieben wird.. oder so...
Und wie kann ein pointer eigentlich auf einen Char zeigen? Ich dachte eigentlich, der würde immer nur auf nen Speicherbereich zeigen
Dieser komische Fehler bleibt auch da, wenn ich return out; schreibe..
Das letzte Script von dir funktioniert.
Ist string in dem Beispiel nicht ein Array? Ich dachte immer ich muss bei scanf das & angeben, damit das Eingelesene in die Adresse geschrieben wird.. oder so...
Und wie kann ein pointer eigentlich auf einen Char zeigen? Ich dachte eigentlich, der würde immer nur auf nen Speicherbereich zeigen

Dieser komische Fehler bleibt auch da, wenn ich return out; schreibe..
Das letzte Script von dir funktioniert.
http://www.FireflySeason2.com
Sie wird wieder fliegen!!
Sie wird wieder fliegen!!
Zitat
Original von Dimitri
Compiler ist MS Visual C++ 6.0
jaha...dann sind komische fehlermeldungen kein wunder...die gcc produziert meinen erfahrungen nach "lesbarere" fehlermeldungen/warnungen...
Zitat
Ist string in dem Beispiel nicht ein Array?
ja, schon...
also, einen String in C gibt es erstmal nicht wirklich.
Man hat die Möglichkeit ein Char-Array zu erstellen, und wenn das mit \0 aufhört nennen wir das einfach mal String...
Der Punkt ist jetzt der:
Das was wir hier String nennen (gilt auch für jedes x-beliebige Array...) ist kein String, noch nicht mal ein Array...das ist ein Pointer. Und der Pointer zeig auf das erste Element des Strings (Arrays).
scanf will einen Pointer ein Char haben (und in diesem Fall soll das ein String sein...da kann man sicher schindluder mit treiben, wenn an der Zieladresse des Pointers nur ein Char ist...). ALso soll es ruhig den Pointer bekommen...&string wäre nicht die adresse des ersten Elements des Strings, sondern die Adresse des Pointers selber!
Zitat
Und wie kann ein pointer eigentlich auf einen Char zeigen? Ich dachte eigentlich, der würde immer nur auf nen Speicherbereich zeigen
absolut richtig...er zeigt auf einen Speicherbereich...bei einem
char* p;
ist an diesem Speicherbereich allerdings eben ein Char...und daher zeigts ja auch irgendwie auf einen Char...
man kann ja auch schreiben:
char buchstabe;
char* pBuchstabe;
buchstabe = a;
pBuchstabe = &buchstabe;
jetzt zeigt ja pBuchstabe auf buchstabe, was ein Char ist...
den Code schau ich mir evtl nachher nochmal an...muss grad noch ne Übung fertig machen...Freitag ist Abgabe und ich hab die Tage keine Zeit :-(
Ähnliche Themen
-
PHP »-
include von anderer Domain
(9. November 2004, 21:21)
-
PHP »-
Sortierproblem
(20. Mai 2004, 20:56)
-
PHP »-
Möglichkeiten berechnen?!
(7. Mai 2004, 19:07)
-
PHP »-
PHP Script funzt nicht obwohl es müsste
(6. Juni 2003, 19:43)
-
PHP »-
Zu lange Zeichenketten kürzen
(6. März 2003, 15:25)


