[C++]Länge eines "strings" anhand eines pointers ermitteln?

linchris

Cadet 4th Year
Registriert
Okt. 2004
Beiträge
72
Ich habe folgendes Problem:

Ich übergebe einen pointer auf eine char-Array an eine Funktion. Jetzt brauche ich in der Funktion aber die Länge des im char-Array erhaltenen Strings.

Gibt es eine elegantere Methode, als die Länge des Strings der Funktion mit zu übergeben, oder die Länge durch Duchlaufen(Schleife) des Arrays bis zum '\0' zu ermitteln?

Also biss jezz siehts ungefähr so aus (sehr stark vereinfacht):
Code:
#include <iostream.h>
#include <stdlib.h>

#define LENOFSTR 8

void numStr(char *pBinStr);

int main()
{
    char BinStr[LENOFSTR];

    //Funktionsaufruf
    numStr(BinStr);
               
    return 0;
}


void numStr(char *pBinStr)
{
    // zaelen wie Lang der String ist
    for(int i=0; pBinStr[i] != '\0'; i++);
    // i ist nach der Schleife die Laenge des Strings

   restlicher code...
}
 
Wenn du C++ programmierst könntest du statt einem char-Array std::string (oder wenn es unbedingt ein Array sein soll auch std:vector) benutzen, ansonsten musst du die Länge entweder übergeben oder mit strlen() ermitteln.
 
Wie mein Vorredner schon sagte einfach strlen(string) ausfüren, dann bekommst du die Länge des Strings zurück.
 
wie gesagt:

es handelt sich um einen pointer!

wüsste nicht, dass strlen() mit nem pointer als übergabewert funzt.
 
ansonsten übergibt man halt den Inhalt des Zeigers mit * (außer das darf man inzwischen nicht mehr) :D
 
linchris schrieb:
Gibt es eine elegantere Methode, als die Länge des Strings der Funktion mit zu übergeben ... ?
Nein. Übergibst Du einer Funktion nicht die maximale Länge des char-Array, kann die aufgerufene Funktion niemals wissen, wieviel Speicher eigentlich für diesen Zeiger reserviert ist. Somit würde man Buffer-Overflows Tür und Tor öffnen.
Bei Routinen zur Stringverarbeitung kann man sich auf das \0 verlassen - sicher ist das aber nicht! Ein böswilliger Aufrufer lässt die \0 weg und provoziert immernoch einen Buffer-Overflow.



Besser ist auf jeden Fall die Benutzung von std::string. Wenn Du C++ programmierst, sollte es auf jeden Fall bei Dir heißen:
Code:
#include <cstdlib> // "moderne" Version des stdlib.h Headers
#include <cstring> // früher string.h
#include <iostream> // früher iostream.h

using namespace std; // damit wird der Namespace std automatisch benutzt
 
Zuletzt bearbeitet:
Zurück
Oben