• Diese Seite verwendet Cookies. Indem du diese Website weiterhin nutzt, erklärst du dich mit der Verwendung von Cookies einverstanden. Erfahre mehr

strlcpy, strlcat

Themenstarter #1
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
 
Themenstarter #4
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:
 
#6
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
 

mordin

Active Member
#7
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.
 
#8
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