Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » pointer, strings prob

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 <
000
20.11.2007, 20:46 Uhr
~C-noob124
Gast


hi und zwar hab ich folgendes prob:

ich soll ein string einlesen, der aber dynamisch gross sein soll, und diesen dann umdrehn. Ja leichter gesagt als getan ich hab scho bissl was gemacht aber funzt net: könntet ihr mir plzz helfen ^^ thx.


C++:
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
  int laenge,i,tmp;
  printf("Wie lang soll ihr Wort sein: ");
  fflush(stdin);
  scanf("%d",&laenge);

  char*wort=calloc(laenge+1,sizeof(char));
  char**umwort=calloc(laenge+1,sizeof(char));
  printf("Geben Sie ihr Wort ein: ");
  fflush(stdin);
  scanf("%s",&wort);

  tmp = laenge-1;
  for(i=0;i<laenge;i++)
  {
    umwort[i]=wort[tmp];
    tmp--;
  }

  printf("%s",*umwort);




  system("PAUSE");
  return 0;
}



Bearbeitung von 0xdeadbeef:

cpp-tags eingefügt, Einrückung. Nächstes mal selbst machen.


Dieser Post wurde am 20.11.2007 um 21:03 Uhr von 0xdeadbeef editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
20.11.2007, 21:22 Uhr
0xdeadbeef
Gott
(Operator)


Zunächst mal ist

C++:
fflush(stdin);


nicht standardkonform, es erzeugt undefiniertes Verhalten. Im Grunde ist das ein Bug, und funktioniert nur zufällig mit deinem Compiler. Wenn ein anderer Compiler den Code in die Finger kriegt, kann der daraus alles mögliche machen.

Was dein Problem angeht, versuchs mit realloc und fgets. Zum Beispiel:

C++:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

ssize_t getline(char **lineptr, size_t *n, FILE *stream) {
  static int const blocksize = 512;

  ssize_t chars_read = 0;

  if(*lineptr == NULL) {
    *n = 0;
  }

  do {
    char *tmp;

    *n += blocksize;
    tmp = realloc(*lineptr, *n);

    if(tmp == NULL) {
      return -1;
    }

    *lineptr = tmp;

    if(fgets(*lineptr, *n, stream) == NULL) {
      return -1;
    }

    chars_read = strlen(*lineptr);
  } while((*lineptr)[chars_read - 1] != '\n');

  (*lineptr)[chars_read - 1] = '\0';

  return chars_read;
}


...das ist jetzt der GNU getline-Funktion nachempfunden.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
20.11.2007, 21:47 Uhr
FloSoft
Medialer Over-Flow
(Administrator)



Zitat von 0xdeadbeef:
Zunächst mal ist

C++:
fflush(stdin);


nicht standardkonform, es erzeugt undefiniertes Verhalten. Im Grunde ist das ein Bug, und funktioniert nur zufällig mit deinem Compiler. Wenn ein anderer Compiler den Code in die Finger kriegt, kann der daraus alles mögliche machen.



unter Windows ist das auf Leeren des Eingabestreams definiert. Nur unter jedem echten Betriebsystem ist das undefiniert ;-)
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ 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: