Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Fehler beim Abschliessen eines Strings

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 < [ 2 ]
000
15.10.2002, 22:13 Uhr
Toby



Hallo,

kann mir jemand erklären, warum es nicht funktioniert?
Ich habe mitlerweile das mit int rausgefunen,
aber warum ist es so???


# include <stdio.h>

int main ()
{

int n,lang;
char wort[20],trow[20];

printf("gib ein wort ein: ");
scanf("%s",wort);

for (n=0;n<lang;n++)
{
trow[lang-n]=wort[n];
}
trow[lang+1]='\0';

printf("das umgedrehte wort ist: '%s'\n",trow);
return(0);
}


Warum geht das schief???

danke
Toby
BTW: wie kann ich den code in so eni Kästchen stecken beim posten? Ich habe hier 'grundlegendes' und 'faq' gelesen, aber nichts über posten von code gefunden.

Dieser Post wurde am 15.10.2002 um 22:19 Uhr von Toby editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
15.10.2002, 22:45 Uhr
~Frank
Gast


Nabend.

Also auf den ersten Blick ist da lang nicht auf die Stringänge initialisiert
Such mal 1-2 Seiten weiter nach String umdrehen, da hatten wir das schonmal.

Für die Codekästchen nochmal in die FAQ schauen, muß in diese [cpp][/cpp] Tags und ThWboardcode
muß eingeschaltet sein.

Frank
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
15.10.2002, 23:31 Uhr
void*
Generic Pointer
(Operator)


Hallo!


C++:
#include <stdio.h>
#include <string.h>
int main ()
{

int n,lang;
char wort[20],trow[20];

printf("gib ein wort ein: ");
scanf("%s",wort);
lang=strlen(wort);
for (n=0;n<lang;n++)
{
trow[n]=wort[lang-n-1];
}
trow[lang]='\0';

printf("das umgedrehte wort ist: '%s'\n",trow);
return(0);
}



Um den Code im "Block anzuzeigen"
Setze ihn in [ c p p ] und [ / c p p ] Tags (Leerzeichen in den Klammern weglassen).

Gruß
void*
--
Gruß
void*
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
16.10.2002, 00:28 Uhr
Toby



Hi,

nein, nein... das Umdrehen habe ich schon verstanden. Was ich nicht verstehe ist,
warum wenn ich die Zeilen mit 'int' und 'char' vertausche, warum es dann falsches Ergebnis gibt?

ein:


C++:
int n,lang;
char wort[20],trow[20];


funktioniert einwandfrei, dagegen ein:

C++:
char wort[20],trow[20];
int n,lang;


liefert falsches Ergebnis. Hmm.... strange....

TIA
Toby
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
16.10.2002, 09:12 Uhr
void*
Generic Pointer
(Operator)


Hallo!

Dein Code oben funktioniert Definitiv nicht! Denn Du bestimmst nirgends die Länge der Eingabe. Wenn Du die Deklarationen in unterschiedlicher Reihenfolge angibst, hast Du vielleicht Glück das die Werte die da im Speicher stehen zufällig passen.

Gruß
void*
--
Gruß
void*
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
16.10.2002, 21:43 Uhr
Tobi



ich hab da mal was von irgend einem "geheimen" Befehl gehört, der strings umdreht: strrev (aber psssssssst )
--
Mit Computern können wir Probleme lösen die wir ohne sie gar nicht erst hätten!

mfg

Tobi
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
17.10.2002, 00:46 Uhr
~Toby
Gast


Hallo! :)

@Tobi :) thx für Dein Tip, aber es geht mir nicht um das Drehen selbst, sondern darum, weswegen die Deklaration "int ...." vor "char ......" sein muss?

@void* :) uups.. in der Aufregung habe ich das Ermitteln der Länge mit strlen vergesse ;)

hier nochmal der richtige code, der diese Abhängigkeit "int" mit "char" darstellt:


C++:
# include <stdio.h>

int main ()
{
char word[20],drow[20];
int i=0,lang;

printf("wort eingeben: ");
scanf("%s",word);

lang=strlen(word);

lang=strlen(word);
for (i=0;i<lang;i++)
drow[lang-i]=word[i];
drow[lang+1]='\0';

printf("gedreht: %s\n",drow);
return (0);
}



wenn ich die Deklarationszeile 'int' mit 'char' vertausche gehts. Warum???

Danke
Toby
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
17.10.2002, 09:17 Uhr
void*
Generic Pointer
(Operator)


Hallo Toby,
warum das funktioniert, wenn Du die beiden vertauschtst hat wahrscheinlich mit dem Speicher-Layout zu tun. Das ist bloss Glück (Pech) oder Zufall. Denn der Code ist definitiv falsch.

So geht's:

C++:
#include <stdio.h>
#include <string.h> // den brauchen wir auch

int main ()
{
int j=0,lang;
char word[20],drow[20];


printf("wort eingeben: ");
scanf("%s",word);

lang=strlen(word); // strlen() nur 1 mal ;)

for (j=0;j<lang;j++)
  drow[lang-j-1]=word [j];
drow[lang]='\0';  // Diese und die Indizierungen in der Schleife waren einfach FALSCH

printf("gedreht: %s\n",drow);
return (0);
}




Gruß
void*


P.S.: Das ist echt bescheiden, dass der im Code die invers Tags nicht ignoriert!
--
Gruß
void*

Dieser Post wurde am 17.10.2002 um 09:20 Uhr von void* editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
17.10.2002, 21:46 Uhr
~Flashbiter
Gast


Bleibt nur noch das Problem, das das Programm crasht, wenn man mehr als 20 Zeichen eingibt.

Flashbiter
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
17.10.2002, 21:57 Uhr
void*
Generic Pointer
(Operator)


Wenn schon Klugscheissen, dann richtig:

Wenn man mehr als 19 Zeichen eingibt crasht das Programm!
--
Gruß
void*
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: