strlen eines charpointers



  • Hallo liebe Leute, ich bin heute über einen Code gestossen und wunder mich warum die Länge des Inhalts des charpointers *name und nicht die Länge des charpointers *name selbsr ausgegeben wird, wenn doch strlen(name)und nicht strlen(*name)da steht.Laut dem Tutor kommt 4 raus aber nicht weil strlen die Größe von *name ausgiebt (ein Pointer hat ja immer 4 Bytes) sondern weil "Adam" 4 Bytes gross ist. Also wie gesagt ich ich hätte eher getippt, dass Pointergröße ausgegeben wird weil, strlen(name). Danke !!!!

    # include <stdio.h>
    # include <stdlib.h>
    # include <string.h>
    
    int main ()
    {
      char *name = "Adam ";
      printf("%u\n",strlen(name));
      return;
    }
    


  • der zeiger auf char heißt name
    strlen gibt nicht die länge des inhalts von name zurück (der ist eine Adresse und die sind immer gleich lang) , sondern zählt von *name (das worauf name zeigt) an aufsteigend solange alle chars im Speicher, bis es 0 erreicht und gibt die Anzahl zurück.



  • Vorsicht!
    strlen ist eine Funktion, die einen Zeiger auf ein nullterminiertes char-Array.
    http://www.cplusplus.com/reference/cstring/strlen/

    Evtl. verwechselst du das mit sizeof().
    Aber auch da musst du aufpassen, da dein Name ein Zeiger auf ein Stringliteral ist und kein Array.

    #include <string.h>
    #include <stdio.h>
    
    int main ()
    {
      char *name  = "Adam ";
      char feld[] = "Adam ";
    
      printf("%u\n",strlen(name));
      printf("%u\n",strlen(feld));
    
      printf("%u\n",sizeof(name));
      printf("%u\n",sizeof(feld));
    
      printf("%u\n",sizeof(*name));
      printf("%u\n",sizeof(*feld));
    
      return;
    }
    

    %u ist eigentlich nicht der richtige Formatspecifier für size_t .
    %zu gibt es erst seit C99.



  • ist also wie einfach ein fixes Gesetz, dass strlen in dem Fall einfach das WOHIN der pointer zeigt ausgiebt. thx Leute !!!



  • latrellvie schrieb:

    ist also wie einfach ein fixes Gesetz, dass strlen in dem Fall einfach das WOHIN der pointer zeigt ausgiebt. thx Leute !!!

    Nein, es gibt nicht das aus, wohin der pointer zeigt.
    strlen steht für string length. Es berechnet die Länge des Strings auf die der Pointer zeigt.
    Wie das geht, hat gary beschrieben.
    strlen ist nichts anderes als:

    int count;
    for (count = 0; *ptr; ++count, ++ptr)
        ;
    return count;
    


  • Ja Nathan hab mich falsch ausgedrückt... strlen gibt die Länge des Strings aus auf den der Pointer zeigt. Danke !!!!


Log in to reply