[C++] aus einem *char das letzte zeichen abschneiden..
-
Guten Morgen,^^
also entweder schlaf ich noch oder i bin echt zu dumm um aus einem einfachen *char
das letzte zeichen abzuschneide.. is echt peinlich aber
irgendwie geht es nicht so wie ich es will
//char * pszString; //wird von Funktion aus übergeben steht nur hier dabei (Inhalt ist egal z.B. " as da ff")die Idee bzw meine Aufgabe besteht darin das letzte Zeichen abzuschneiden was ich eigentlich so machen würde
pszString=pszString[strlen(pszString)-2]=(char) NULL;leider kommt aber eine Zugriffsverletzung.. die kommt aber auch wenn ich eine Konstante reinschreib also z.B. 5 oda so..
geht das jetzt echt net oda bin i einfach zu blöd...
wäre um einen Tipp zu dieser frühen Stunde sehr dankbar

greetz da sand13r
-
Erstmal: Das letzte Zeichen des char* liegt bei
Str[strlen(str)-1]- und das mußt du mit '\0' überschreiben, um es "abzuschneiden".Zweitens: Worauf zeigt denn dein char*? Wenn das ein String-Literal ist, hast du ein Problem - die sind read-only, also darfst du da nicht drin herumschreiben.
Drittens: Nimm lieber std::string, das kapselt die ganzen Probleme der C Stringverarbeitung für dich.
-
Hallo^^ Guten Morgen und Danke für die schnelle Antwort^^,
also sprich eigentlich müsste es schon gehen oder? da bin ich ja schonmal beruhigt
aos dachte strlen(String)-1; wäre das String Ende Kennzeichen?Hmm also i versteh immano it ganz wieso des net geht.. hab des sonst doch au so gemacht..werd mal schauen ob is mit Strings hinbekomm da kann i dann ja substr nehmen.. hab i au shcon gesucht.. aber der findet das String Schlüsselwort net..:D
eiiiiiiiiiiindeutig noch zu früh

danke nochmal falls noch eine Idee hast kannst ja noch sagen
greetz da sand13r
-
Ja, es sollte funktionieren - zumindest solange du Schreibrechte auf dem String hast. String-Literale (
char* pStr = "Hallo";) sind schreibgeschützt (vor allem weil sie von mehreren Ecken aus verwendet werden könnten) - char-Arrays (char Str[]="Hallo";) darfst du nach Belieben ändern.sand13r schrieb:
also sprich eigentlich müsste es schon gehen oder? da bin ich ja schonmal beruhigt
aos dachte strlen(String)-1; wäre das String Ende Kennzeichen?Nein - die Indizes beginnen immer noch mit 0 - strlen(String)-1 ist das letzte gültige Zeichen.
Hmm also i versteh immano it ganz wieso des net geht.. hab des sonst doch au so gemacht..werd mal schauen ob is mit Strings hinbekomm da kann i dann ja substr nehmen.. hab i au shcon gesucht.. aber der findet das String Schlüsselwort net..:D
Wer findet "String" nicht? Und könnte es daran liegen, daß du den Bezeichner groß geschrieben hast?
-
Danke für deine Antwort,
also ich benutze VS 6.0 und wenn ich std:: schreib kann i string auswählen aber wenn is dann kompilier
dann kommt "E:\tprfile\ParseTprFile.cpp(713) : error C2039: 'string' : is not a member of 'std'"oben hab ich so gut wie alles includiert was geht :D^^
#include "stdafx.h" #include "ParseTprFile.h" #include <iostream.h> #include <conio.h> #include <fstream.h> #include <string.h> #include <exception> #include <time.h> #include <windows.h> #include <stdio.h> #include <string.h> #include <stdlib.h>wenn noch was fehlt wäre ich um einen Tipp dankbar.
greetz sand13r
-
sand13r schrieb:
oben hab ich so gut wie alles includiert was geht :D^^
Ohje...
#include "stdafx.h" #include "ParseTprFile.h" #include <iostream.h> // heisst seit 9 Jahren <iostream> #include <conio.h> // gibt's beim Visual C++ garnicht?! #include <fstream.h> // heisst seit 9 Jahren <fstream> #include <string.h> // meinst Du <cstring> oder <string>? #include <exception> #include <time.h> // heisst strenggenommen <ctime> #include <windows.h> // Brauchst Du Sleep() oder sowas? #include <stdio.h> // Braucht man in C++ eigentlich auch nicht mehr #include <string.h> // s.o. (string.h) #include <stdlib.h> // s.o. (stdio.h)Inkludier lieber, was Du wirklich brauchst

-
C++ Standardheader haben keine Dateiendung .h, also brauchst du <iostream>, <fstream>, <string> (<string.h> gibt's auch, enthält aber die C Stringverarbeitungsfunktionen), <exception> - und anstelle der C Header ihre C++ Versionen <ctime>, <cstdlib>, <cstdio>* und <cstring>.
* wobei - stdio und iostreams im selben Programm? entscheide dich für eine Variante

-
XD uüpps

tut mir ja leid

bin eig eingefleischter Boarland Fan muss nun in meiner neuen Firma jetzt MS VS 6.0 benutzen ^^ kenn mi damit no it so aus aba danke für die Information^^JUhuu mit #include <string> gehtz :D^^ vielen DANK ^^
mal schaun ob i jetzt weiter komm..
greetz and thx again sand13r
-
LordJaxom schrieb:
#include <fstream.h> // heisst seit 9 Jahren <fstream>Nur der Vollständigkeitshalber...da meckert er bei mir wenn ich das h weglasse

Hm irgendwie will das so auch nicht i werds wohl doch mit char [] machen und dann halt ne struktur zurückgeben.. wollte ja eig denn char* zurückgeben aber das geht ja nicht oda..wenn ich ihn net verändern kann.. es sei denn i mach einen neuen denn ich dann nur zurückliefer oda?
greetz sand13r
-
Ja, das könntest du machen - aber das wirft mehr Probleme auf als die Sache wert ist (Speicherverwaltung, etc). Die Klasse std::string kapselt dir alle diese Probleme.
(btw, der MSVC sollte <fstream> eigentlich kennen)
-
sand13r schrieb:
bin eig eingefleischter Boarland Fan muss nun in meiner neuen Firma jetzt MS VS 6.0 benutzen
Wow. 2007 werden Compiler von 1998 verwendet. Ist das irgendein altes, schlecht gewartetes Projekt, an dem Du da arbeitest?
-
Ja Speicherverwaltung hab i au grad gesehen

da war ja was
wie ging der Mekrsatz doch gleich ^^ (kurz nachschau)
"Returne nie eine Referenz oder einen Zeiger auf eine lokale Variable"
hab dann inner main halt nur müll..weil die Variable ja nich mehr da is.. doh^^..
ja habs ja mit Strings versucht aba au nicht weitergekommen
hab dann dein Magazin beitrag über Strings mal angeschaut..
und den mit Speicherverwaltung passt echt supa genau das was i eig brauch ^^habs jetzt gelöst mit ner Struktur da mein Mitarbeiter meinte das i string und cstring vermeiden sollte .. glaub wegen c importierung oda so.. naja wär trotzdem cool gewesen
mal zu sehen wie das ginge..muss mi mal bissel mit strings auseinander setzen habs schon geshen
danke an alle nochmal greetz sand13r
EDIT:
nman schrieb:
Wow. 2007 werden Compiler von 1998 verwendet. Ist das irgendein altes, schlecht gewartetes Projekt, an dem Du da arbeitest?
ne meinte eig mich damit weil i es mit Borland gelernt habe
aba MS VS mach i halt ers 1 Woche rockt aba au wollt hier kein compiler war lostretten soryy 
-
sand13r schrieb:
Wow. 2007 werden Compiler von 1998 verwendet. Ist das irgendein altes, schlecht gewartetes Projekt, an dem Du da arbeitest?
ne meinte eig mich damit weil i es mit Borland gelernt habe
aba MS VS mach i halt ers 1 Woche rockt aba au wollt hier kein compiler war lostretten soryy 
Tust Du nicht, ich verwende weder Visual C++ noch Borland. Ich wundere mich nur, weil zwischen meinen Besuchen im C++-Subforum gut und gerne eine paar Monate vergehen können. Und eigentlich rechne ich seit ein paar Jahren damit, dass der VC++6 endlich ausstirbt, insbesondere da ja auch die Nachfolger von MS schon wesentlich brauchbarer sind.
-
nman schrieb:
Und eigentlich rechne ich seit ein paar Jahren damit, dass der VC++6 endlich ausstirbt, insbesondere da ja auch die Nachfolger von MS schon wesentlich brauchbarer sind.
Aso^^ ja das kann gut sein^^
hab inna schule eben Borland gelernt und jetzt inna Firma benutzen die es MS VS 6.0
wollen wahrscheins nur keine neuen Lizensen kaufen^^ oder haben Angst wegen
Portierung.. soll ja nich immer ganz einfach sein.. von einem compiler zum anderen wechseln auch wenn beide MS sind^^ oder ?Darf man fragen welchen compiler du dann benuzt? (sry off topic) vielleicht..dev oda linux compiler?
greetz
-
Aber auf Dauer wird es für die Firma noch schlimmer sein, einen nicht standard-konformen C++ Compiler zu verwenden.
Und den MSVC 2007 gibt es auch als Express-Version umsonst zum Download.
-
Ist der MS VS c++ 6.0 nich mehr Standardkomform? ändert sich da doch so viel die ganze Zeit oder wie? krass*
Ja is ja meistens so das man am falschen Ende spart.. aber sag das mal zu deinem chef
nachdem ne Woche da gearbeitet hast
der macht mi kalt^^greetz
-
sand13r schrieb:
Ist der MS VS c++ 6.0 nich mehr Standardkomform? ändert sich da doch so viel die ganze Zeit oder wie? krass*
"Nicht mehr" ist falsch ausgedrückt - "nie gewesen" trifft's besser

(wobei, afaik gibt es keinen Compiler, der 100% standardkonform ist - aber je neuer sie sind, desto näher sind sie am Optimalzustand)
-
CStoll schrieb:
"Nicht mehr" ist falsch ausgedrückt - "nie gewesen" trifft's besser

Wobei man fairerweise dazu sagen sollte, als der Compiler aktuell war, gab es den Standard (in der akutellen Form) auch noch garnicht oder gerade mal ein paar Wochen

-
CStoll schrieb:
sand13r schrieb:
Ist der MS VS c++ 6.0 nich mehr Standardkomform? ändert sich da doch so viel die ganze Zeit oder wie? krass*
"Nicht mehr" ist falsch ausgedrückt - "nie gewesen" trifft's besser

(wobei, afaik gibt es keinen Compiler, der 100% standardkonform ist - aber je neuer sie sind, desto näher sind sie am Optimalzustand)Soviel ich weiß ist der Comeau C++ Compiler entweder zu 100% Standardkonform, oder zumindest sehr nahe dran (inklusive export bei Templates).
Und die, die über den MSVC 6.0 schimpfen: Es gibt Firmen mit noch älteren Compilern im Einsatz (STL was ist das, kann man das essen?...).
cu André
-
LordJaxom schrieb:
...
Wobei man fairerweise dazu sagen sollte, als der Compiler aktuell war, gab es den Standard (in der akutellen Form) auch noch garnicht oder gerade mal ein paar Wochen
Aber der Standard war bereits eine Weile in der Verabschiedung. Und dafür ist der Compiler was den Sprachstandard angeht mangelhaft, oder im besten Fall "Ausreichend"...
cu André
-
LordJaxom schrieb:
CStoll schrieb:
"Nicht mehr" ist falsch ausgedrückt - "nie gewesen" trifft's besser

Wobei man fairerweise dazu sagen sollte, als der Compiler aktuell war, gab es den Standard (in der akutellen Form) auch noch garnicht oder gerade mal ein paar Wochen

Naja, ist ja nicht so, als wäre MS nicht am Standard beteiligt und in den entsprechenden Gremien nicht recht gut vertreten gewesen...
asc: Comeau ist auch nicht 100%ig standardkonform, auch wenn es vermutlich der Compiler ist, der am nächsten dran ist. Insbesondere export wird wohl niemals vollständig unterstützt werden.
edit: Weil danach gefragt wurde: Ich benutze den g++, wenn ich C++ programmiere.