Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » strcat geht nicht

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
12.10.2004, 21:05 Uhr
~Kevin
Gast


Hallo,
Ich habe vor eine Art Interpreter zu programmieren... Dazu muss ich char variablen zu einer zusammenfügen. Ich ahbe es mit strcat versucht aber es gibt immer ein Zugriffs Fehler...


C++:
//interpreter.c
#include <stdio.h>
#include <string.h>
#include "loadfile.h"

int index = 0;
int size;

char GetToken(char *string)
{
   char token;
   size = strlen(string);
   if(index<=size) {
      token = string[index];
      index++;
   }      
   return token;
}    

void Interpreter(char* file)
{
   int while_num;
   int if_num;
   int else_num;
   char token;
   char* string;
   int end;
   FILE *datei;
      
   datei = OpenFile(file);
   while((token = ReturnToken(datei))!= EOF) {
      if(!isspace(token)) {
         strcat(string, token);
//Hier sollen alle Zeichen die aus der Datei ausgelesen werden in string kopiert werden...
         printf("%c",token);    
      }    
   }
   CloseFile(datei);
   for(end = 0;end<=size;end++) {
      printf("%c",GetToken(file));
   }    
}


C++:
//loadfile.c
#include <stdio.h>

FILE* OpenFile(char* file)
{
   FILE *datei;
   datei=fopen(file,"r");
   if(datei != NULL) {
   } else {
      printf("Fehler beim oeffnen der Datei!");
      exit(1);
   }    
   return datei;
}


Ich hoffe ihr könnt mir helfen!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
12.10.2004, 21:08 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


hi, char *string ist ein null pointer, das hinzufügen an einen nullpointer schlägt nun mal fehl

Wenn du schon string.h inkludierst, warum benutzt du dann nihct gleich std::string?
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
12.10.2004, 21:18 Uhr
~Kevin
Gast



Zitat von FloSoft:
Wenn du schon string.h inkludierst, warum benutzt du dann nihct gleich std::string?

Wie meinst du das? Was ist std::string? Dev-Cpp erzeugt da nur eine Fehlermeldung...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
12.10.2004, 21:33 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


aso hab übersehen das du c-code schreibst. das Problem ist, du müsstest vorher wissen wie groß der string ist, sonst musst du folgendes machen:


Code:
1. Byte reservieren (malloc...)
2. einlesen, ok kommt noch ein weiteres byte
3. 2 Bytes reservieren, alten speicher rüberkopieren (evtl mit realloc)
4. usw



Optimieren könnte man das so, wie es C++-STL-Klassen machen:


Code:
Speicher - "Elemente"
0 - 0
2 - 1 <- realloc grundwert 2
2 - 2
4 - 3 <- realloc doppelter speicher: 2x2 = 4
4 - 4
8 - 5 <- realloc doppelter speicher 2x2x2 = 8
8 - 6
8 - 7
8 - 8
16 - 9 <- usw
usw



dann reduziert man die anzahl der reallocs, welche ja speicherintensiv sind
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
12.10.2004, 21:45 Uhr
~Kevin
Gast


Ok der String ist jetzt char string[20] wie muss ich es dann machen? Die Meldung beim Compiler bleibt (ICh ahbs beim ersten Beitrage vergessen )


Code:
32 C:\Dev-Cpp\interpreter\interpreter.c [Warning] passing arg 2 of `strcat' makes pointer from integer without a cast
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
12.10.2004, 21:48 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


hmm token ist 1 char, machs so, dann meckert er nicht:


C++:
char token[2];

//...
token[1] = '\0';

token[0] = ReturnToken(...)

strcat(string,token);

printf("%c",token[0]); // oder printf("%s",token);



wenn dir 20-byte für den string reichen dann solls so natürlich auch recht sein
--
class God : public ChuckNorris { };

Dieser Post wurde am 12.10.2004 um 21:48 Uhr von FloSoft editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
12.10.2004, 22:04 Uhr
~KEvin
Gast


Ok der Compielr zeigt keinen Fehler mehr Aber leider bricht das Programm trotzdem mit der Meldung ab
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
12.10.2004, 22:04 Uhr
Pablo
Supertux
(Operator)


Bei strcat muss man nicht vergessen, dass das Zielpuffer eine 0-terminierendes string sein muss, d.h. wenn du Speicher grade mit malloc reserviert hast, musst du nich vergessen (angenommen die Variable heißt str) *str=0; haben.
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
12.10.2004, 22:19 Uhr
~KEvin
Gast


Man is das kompliziert! Wie ist den der Verkettungoperator (Heißt das so?) also das womit man zwei varibalen etc verbinden kann also char* test = bla (operator) lo
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
13.10.2004, 02:07 Uhr
Pablo
Supertux
(Operator)


Für 2 char* gibt es solchen Operator nicht, weil char* keine Strings sind sondern Zeigern auf eine Adresse von Typ char. Wenn du 2 char*,char[] Zeichenketten miteinander verketten willst, musst du strcat oder strncat benutzen. Wenn du aber C++ benutzt, solltest du std::string nehmen, das ist viel einfacher zu handhaben als C Zeichenketten.
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
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: