Brauche Hilfe bei Pointern



  • Wutz schrieb:

    Th69 schrieb:

    char *s = "Test";
    // alternativ: char[] s = "Test"
    

    Unsinn. Da ist nichts alternativ. Das sind grundsätzlich unterschiedliche Definitionen.

    Ich meinte natürlich

    char s[] = "Test";
    

    😉
    Und mit "alternativ" meinte ich auch nicht, daß die beiden Definitionen gleich sind, sondern daß für beide Definitionen der darunterstehende Code so funktioniert (und die gleiche Ausgabe liefert, s. http://ideone.com/Q9xj4X )!



  • Ich hab folgendes versucht aber funktioniert nicht bzw aber der Rückgabewert ist nur die Länge des Strings bis lim.Was muss ich ändern damit die Länge des Strings zurückgegeben wird,auch wenn es lim übersteigt?

    int mgetline(char *s,int lim)
    {
       int c;
       char *t=s;
    
       while (c=getchar() != EOF && c != '\n')
       {
          if (--lim>0)
          {
             *s++=c;
          }
       }
    
       if (c == '\n')
       {
          if (--lim>0)
          {
             *s++=c;
          }
       }
    
       *s = '\0';
    
       return s-t;
    }
    


  • Joe1903 schrieb:

    Ich hab folgendes versucht aber funktioniert nicht bzw aber der Rückgabewert ist nur die Länge des Strings bis lim.

    Mir ist so, als hätte ich das schon erwähnt.

    Joe1903 schrieb:

    Was muss ich ändern damit die Länge des Strings zurückgegeben wird,auch wenn es lim übersteigt?

    Auch das hatte ich schon erwähnt. Zähle die Zeichen mit einer extra Variablen. Du könntest sie i nennen (obwohl es bessere Namen gibt).



  • Joe1903 schrieb:

    Ich hab folgendes versucht aber funktioniert nicht bzw aber der Rückgabewert ist nur die Länge des Strings bis lim.Was muss ich ändern damit die Länge des Strings zurückgegeben wird,auch wenn es lim übersteigt?

    int mgetline(char *s,int lim)
    {
       int c;
       char *t=s;
    
       while (c=getchar() != EOF && c != '\n')
       {
          if (--lim>0)
          {
             *s++=c;
          }
       }
    
       if (c == '\n')
       {
          if (--lim>0)
          {
             *s++=c;
          }
       }
    
       *s = '\0';
    
       return s-t;
    }
    

    Probier mal den. Zeichen reinhacken und hin und wieder return drücken. Und dann sagen, ob es passt oder nicht. 🙂

    int mgetline (char *s, unsigned lim)
    {
        char *t=s;
    
        while(1)
        {
            int c = getchar();
            lim--;
            if (c == '\n' || lim == 0)
                break;
            *s++ = (char)c;
        }
        *s = 0;
        return (int)(s-t);
    }
    
    int main()
    {
        char test[16];
        for (;;)
        {
            int len = mgetline (test, 10);
            printf ("%s, length: %d\n", test, len);
        }
    }
    


  • Ich hab eine andere Frage zu Arrays aber zu einem anderen Code.
    Muss ich hierfür einen neue Diskussion öffnen?



  • Joe1903 schrieb:

    Ich hab eine andere Frage zu Arrays aber zu einem anderen Code.
    Muss ich hierfür einen neue Diskussion öffnen?

    Ja bitte.



  • Joe1903 schrieb:

    Ich hab folgendes versucht aber funktioniert nicht bzw aber der Rückgabewert ist nur die Länge des Strings bis lim.Was muss ich ändern damit die Länge des Strings zurückgegeben wird,auch wenn es lim übersteigt?

    int mgetline(char *s,int lim)
    {
       int c;
       char *t=s;
    
       while (c=getchar() != EOF && c != '\n')
       {
          if (--lim>0)
          {
             *s++=c;
          }
       }
    
       if (c == '\n')
       {
          if (--lim>0)
          {
             *s++=c;
          }
       }
    
       *s = '\0';
    
       return s-t;
    }
    

    Kannst du mir anhand meines Codes ein Bsp geben?Wenns keine Umstände macht..



  • Joe1903 schrieb:

    Was muss ich ändern damit die Länge des Strings zurückgegeben wird,auch wenn es lim übersteigt?

    Sinn und Zweck von lim ist es, den maximal zur Verfügung stehenden Speicher anzugeben. Über diese Grenze hinaus zuzugreifen ist UB und schizophren.


Anmelden zum Antworten