formatString Methode
-
original_string.length()
-
Danke für die Antwort.
Das ist ja aber mein Problem: strlen möchte den Typ "const char*"
Ich habe jetzt die ganze Funktion schon auf char umgebaut. Aber das Problem bleibt bestehen.Wie schaffe ich es, dass ich den übergebenen String richtig benutzen kann? Wie schon gesagt: strlen möchte unbedingt ein const char*
-
std::string ist definitiv kein Element von C, sondern eine C++-Klasse (und bringt für diesen Zweck seine eigene Methode str.size() mit). Alternativ könntest du auch str.c_str() nehmen und an strlen() weitergeben.
-
std::string ist definitiv kein Element von C, sondern eine C++-Klasse
Oh das ist schlecht. Sollte C sein. Dann muss ich wohl doch mit char[] arbeiten... Danke mal soweit. Ich meld mich bestimmt wieder mit dem nächsten Problem
-
Also ich werd echt noch verrückt. Ganz toll alles. Wie folgt:
#define MAX_CHAR 40 char convertString(const char original_string) { int original_string_length = strlen(&original_string); if (original_string_length <= MAX_CHAR) { return original_string; } char formatted_string; return formatted_string; }
Compiliert schön durch. Wird ja auch noch nichts damit gemacht. Brauch ich aber auch eigentlich gar nicht weiter machen, weil der Aufruf in der Main-Methode
int main() { convertString("Hallo"); }
zu dieser Compiler-Meldung führt:
testproject.cpp(18) : warning C4267: 'initializing' : conversion from 'size_t' to 'int', possible loss of data
testproject.cpp(34) : error C2664: 'convertString' : cannot convert parameter 1 from 'const char [6]' to 'const char'
This conversion requires a reinterpret_cast, a C-style cast or function-style cast
-
char convertString(const char* original_string) { size_t length = strlen(original_string); // .. }
-
C/C++ Code:
char convertString(const char* original_string)
{
size_t length = strlen(original_string);
// ..
}Okay, das leuchtet ein. Behebt aber ja nur die Warnung. Nicht den Fehler... Ich check's überhaupt nicht mehr
-
lass hirn vom himmel regnen
-
??????????? schrieb:
char convertString(const char* original_string) { size_t length = strlen(original_string); // .. }
fast richtig, exakterweise müsste es jedoch "char***** convertString(const char* orignial_string)" heißen (außer du willst nur ein einzelnes Zeichen zurückgeben. Und formatted_string sollte ebenfalls als char* deklariert und per new .ähm. malloc() reserviert werden (dann mußt du aber irgendwie dafür sorgen, daß der Kollege am anderen Ende des Funktionsaufrufes free() aufruft).
-
lass hirn vom himmel regnen
Danke für diesen überaus produktiven Beitrag. Wobei ich sagen muss, dass mir "include hirn" als Benutzername wirklich ein Lachen hervorzaubert
Danke für den Hinweis mit dem einzelnen Zeichen. Hatte irgendwie einen Blackout. Klar, wird ja immer als Zeiger behandelt. Aber das Prob ist halt, dass der der funktion übergebene original-string eine Konstante ist und der Rückgabewert der Funktion nur char*. Wäre in diesem Fall natürlich möglich, sie zu const char* zu machen. Aber dann kann ich ja den formatted String nicht mehr zurückgeben, weil der ja eben nicht konstant ist...
Ich müsste den konstanten String also irgendwie in einen nicht konstanten wandeln.Habe das getan. Die Funktion sind nun so aus:
char* convertString(const char* original_string) { int original_string_length = strlen(original_string); char* formatted_string; formatted_string = (char*)malloc(1024); if (original_string_length <= MAX_CHAR) { strcpy(formatted_string, original_string); } //else formatierung durchführen und in formatted_string speichern return formatted_string; }
Läuft sogar ohne Fehlermeldung. Nur beim Debuggen stell ich festm dass schon die Variable "original_string_length" nicht belegt wird...
-
Ah sorry. Cool geht eigentlich so. Habe vergessen, dass die Initialisierungen der Variablen immer ganz am Anfang schon stehen müssen (irgendne C-Geschichte). Ich mach mal weiter. Danke vielmals! Hast mir wirklich sehr geholfen!