Frage

Ich habe eine Zeichenfolge in C ++ vom Typ const char* als Argument übergeben strlen, aber es gibt void zurück.

es geht wie

strlen(astruct.string);

Danke ..

EDIT: Habe einige Überprüfung,

strlen("test");

gibt noch Leere .. warum?

EDIT: Hier ist das Bild http://img14.imageshack.us/img14/1808/strlen.png

Es tut uns ist bisher unklar. Formatierung war nicht ganz gut funktioniert. Auf jeden Fall wurde die Verwirrung sowohl Evan Teran und Vlad Romascanu gelöst. Werfen Sie auch einen Blick auf Brian R. Bondy Antwort.

Danke. Fühlen Sie sich frei zu schließen.

War es hilfreich?

Lösung

Mit Bezug auf Ihre Screenshot: Ihr Debugger <void> für strlen(...) angezeigt wird, wenn in der Tat sollte es einen Fehler an

.

Sie können diese Methoden nicht aufrufen und ihre Ergebnisse in der Debugger-Uhr angezeigt werden soll. Der Debugger wird nur vorhandene Variablen und Daten anzuzeigen. Es kann nicht willkürlich Methoden bei Bedarf aufrufen, da die Methoden, um den Zustand des Programms verändern kann in einer Weise ausgetestet werden, die nicht entweder durch den Autor des Codes erwartet wurden noch durch den Debugger.

Was Sie tun können, ist, in Ihrem Code, vorübergehend hinzufügen:

size_t tmp_len = strlen(struc.string);

dann kompilieren, und fügen Sie tmp_len auf die Uhr.

Andere Tipps

Sie werden durch die crappy Debugger von Visual Studio 6.0 verwirrt. Verlassen Sie sich nicht auf diese. Es könnte wahrscheinlich nicht den Rückgabewert erhält aufgrund inlining oder etwas ähnliches.

den Wert Drucken Sie den realen Wert zu erhalten.

EDIT: Auch aus Ihrem Beispiel, scheint es, dass Sie das Ergebnis Strlen ohnehin möglicherweise nicht gespeichert werden. Dies kann auch ein Grund, warum der Debugger den Rückgabewert nicht zu sehen. Es ist durchaus möglich, dass die Compiler entschieden, dass es nicht wirklich braucht, um die Strlen ausführen, wenn Sie nicht den Wert verwenden.

Hinweis: An dieser Stelle gibt es keine wirkliche Entschuldigung für noch mit VC ++ 6.0. Es ist ein alter Compiler und IDE, die ein peinlichen schlecht c ++ Compiler ist. Die neueren Versionen der Visual C ++ Compiler sind kostenlos (ohne die IDE), sie verwenden.

strlen ist nicht der Rückgabetyp ungültig, es ist Ihr Debugger, der nicht die richtige Botschaft gibt.

Warum Ihr debbuger zeigt Leere?

Die Implementierung von strlen, die Sie verwenden wahrscheinlich um einen #define someothername_strlen Strlen gewickelt wird.

Der Debugger wahrscheinlich nicht unterstützt #define richtig oder einige andere Modifikatoren auf die Funktion.

Du musst etwas wie iLen = strlen tun ( "test"), dann iLen in Ihrer Uhr überprüfen.

Normalerweise können Sie Funktionen in Ihrer Uhr anrufen. Zum Beispiel versuchen, die folgende Funktion dann rufen Sie es in Ihrer Uhr zu definieren:

int testFunc(char*)
{
  return 5;
}

Sie werden wahrscheinlich 5 in Ihrer Uhr als Ergebnis erhalten.

strlen gibt eine ganze Zahl ist, so dass ich nehme an, Sie meinen es gibt "0" aus.

Auch die Art und Weise, dass Sie Ihren Datentyp angeben, kann ich nicht ganz sagen, ob es ein const char * oder char ist **. Falls das letzte ist, dann müssen Sie sicherstellen, dass Sie die ** zu einem einzigen sind dereferencing *.

Meine Vermutung ist, dass die Zeichenfolge mit einer Null-Byte beginnt, weshalb es 0 zurück.

In C ++ Funktionen geben immer einen Wert vom Typ sie deklariert sind zurückzukehren. Da die strlen Funktionsdeklaration etwas wie folgt aussieht:

size_t strlen(const char *);

das einzige, was es kann möglicherweise Rückkehr ist ein size_t. Der Compiler verwendet diese Informationen zum Zeitpunkt der Kompilierung, um zu bestimmen, wie der Rückgabewert zu handhaben, wenn Sie die Funktion aufrufen. Der Punkt hier ist, dass, wenn die strlen Funktion, wie oben erklärt ist, kann es nicht void manchmal und einen Wert vom Typ size_t andere Zeiten.

zurückzukehren entscheiden

Dies ist im Allgemeinen eine Eigenschaft von statisch typisierten Sprachen wie C ++. In dynamisch typisierten Sprachen (Perl, Python, Ruby, PHP, etc.) kann eine Funktion entscheiden, einen Wert von jeder Art zurück jedes Mal aufgerufen wird.

Es kann nicht leer zurück. Leere ist das Fehlen eines Rückgabewertes, so kann man nicht, äh, gibt es zurück.

Wie überprüfen Sie für nichtig sowieso? Void ist kein Wert. Bitte zeigen, wie Sie leer bekommen. Ist es an der Zeit kompilieren oder Zeit laufen?

Wenn Sie in der Tat zu tun haben ein System, in dem strlen mit einem void Rückgabetyp deklariert wird, läuft so schnell wie möglich in der anderen Richtung.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top