strlcpy, strlcat

mogbo

Banned
Code:
#include <stdio.h>
#include <string.h>

int main()
{
    char buffer[50];
    char buffer2[] = "Hallo du\n";

    strlcpy(buffer, "Hallo Welt\n", sizeof(50));

    strlcat(buffer, buffer2, sizeof(50));

    printf("%s\n", buffer);

    return 0;
}
Output:
Code:
Hal


Code:
#include <stdio.h>
#include <string.h>

int main()
{
    char buffer[50];
    char buffer2[] = "Hallo du\n";

    strcpy(buffer, "Hallo Welt\n");

    strcat(buffer, buffer2);

    printf("%s\n", buffer);

    return 0;
}
Output
Code:
Hallo Welt
Hallo du

Ich dachte eigentlich die beiden wären einigermaßen equivalent, aber den Output von strlcpy und strlcat geht mir einfach nicht in den Kopf :)

Wäre es möglich das ganz knapp zu erklären, wie ich mit strlcpy und strlcat zum Ziel komme, aus der Manpage und mit Google werde ich leider nicht wirklich schlau
 
sizeof(50) .. echt jetzt? :-)
Wow, danke habs verstanden :)
Fälscher kann man die Manpage glaube ich echt nicht verstehen

Code:
#include <stdio.h>
#include <string.h>

int main()
{
     char buffer[50];
     char buffer2[] = "Hallo du\n";

     strlcpy(buffer, "Hallo Welt\n", sizeof(buffer));

     strlcat(buffer, buffer2, sizeof(buffer));

     printf("%s\n", buffer);

     return 0;
}


Das ist so peinlich... Bitte löschen :ugly:
 
Das würde ich mir auch abgewöhnen. Der sizeof-Operator ist nicht dafür geeignet Zeichenkettenlängen festzustellen. In deinem Fall klappt das nur, weil du ein Array nutzt, würdest du einen Zeiger nutzen, würde sizeof die Größe des Zeigers zurückgeben, nicht die Stringlänge.
Nutze stattdessen immer strlen(3) um die Länge einer Zeichenkette zu bestimmen.

Rob
 
Nutze stattdessen immer strlen(3) um die Länge einer Zeichenkette zu bestimmen.
Aber im Zusammenhang mit strlcpy(3) und strlcat(3) ist das doch Quatsch. Du übergibst denen die Puffergröße, d.h. die maximal mögliche Stringlänge, damit die aufhören bevor sie irgendwohin in den Speicher schreiben. buffer ist doch erstmal uninitialisiert und erst nach dem ersten strlcpy-Aufruf ist da überhaupt eine Zeichenkette drin.
 
Stimmt, es geht dabei um Puffergröße, nicht Stringlänge. Dennoch die Warnung hinsichtlich Zeiger: mittels sizeof kann man nicht die Puffergröße bestimmen.

Rob
 
Zurück
Oben