Webmaster Forum Logo Part 1 Webmaster Forum Logo Part 2
Webmaster Forum Logo Part 3
     
 
  :: Anmeldung

Benutzername:

Registrierung...

Passwort:

Passwort vergessen?

angemeldet bleiben


  
  :: Umfrage
Welche sozialen Netzwerke benutzt du regelmäßig?

 Facebook
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 73%
 keines
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 22%
 Google+
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 19%
 Twitter
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 11%
 Xing
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 6%
 schülerVZ
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 5%
 meinVZ
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 4%
 studiVZ
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 4%
 MySpace
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 2%
 LinkedIn
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 2%

 ges. 392 Stimmen
 
  :: Buttons

Valid XHTML 1.0 Transitional

Dimitri

König

Dabei seit: 16.01.2003

Beiträge: 761

 

1 Zum Seitenanfang

Montag, 17. Mai 2004, 21:15

[C] String übergeben

Hallo!
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));
}
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?
http://www.FireflySeason2.com
Sie wird wieder fliegen!!
 

narfnarf

Haudegen

Dabei seit: 30.11.2002

Beiträge: 678

 

2 Zum Seitenanfang

Montag, 17. Mai 2004, 22:33

dein "String" ist nicht nullterminiert...

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)

 

Dimitri

König

Dabei seit: 16.01.2003

Beiträge: 761

 

3 Zum Seitenanfang

Montag, 17. Mai 2004, 22:50

Und wie funktioniert das hier:

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!!

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »Dimitri« (17. Mai 2004, 23:01)

 

narfnarf

Haudegen

Dabei seit: 30.11.2002

Beiträge: 678

 

4 Zum Seitenanfang

Montag, 17. Mai 2004, 23:20

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)

 

Dimitri

König

Dabei seit: 16.01.2003

Beiträge: 761

 

5 Zum Seitenanfang

Dienstag, 18. Mai 2004, 14:19

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.
http://www.FireflySeason2.com
Sie wird wieder fliegen!!
 

narfnarf

Haudegen

Dabei seit: 30.11.2002

Beiträge: 678

 

6 Zum Seitenanfang

Dienstag, 18. Mai 2004, 23:16

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