#include /* Berechnet die Länge der übergebenen Zeichenkette (ohne das terminierende NUL- * Zeichen) - oder anders: Bestimmt den Index des ersten NUL-Zeichens in s. */ size_t Strlen(char const* s) { #if 1 size_t n = 0; while (*s) { ++n; ++s; } return n; #else // Ohne separaten Zähler char const* i = s; while (*i) ++i; return i = s; #endif } /* Kopiert die Zeichenkette mit terminierendem NUL-Zeichen von s nach d. Gibt * den übergebenen Wert von d zurück. */ char* Strcpy(char* d, char const* s) { char* o = d; #if 1 while (*d++ = *s++); #else // Ausführlicher char c; do { c = *s; *d = c; ++d; ++s; } while (c != '\0'); #endif return o; } /* Fügt die Zeichenkette s ans Ende der bestehenden Zeichenkette d an. */ char* Strcat(char* d, char const* s) { char* o = d; // Suche das Ende (NUL) der Zeichenkette bei d. while (*d) ++d; // Kopiere s an das gefundene Ende. Strcpy(d, s); return o; } int main(void) { char* p = "Hallo"; printf("%s\n", p); printf("%zu\n", Strlen(p)); char a[20]; printf("%s\n", Strcpy(a, p)); Strcat(a, p); printf("%s\n", a); /* Nonsens! Sucht das NUL-Zeichen und überschreibt es mit NUL. */ // Ensure null termination a[Strlen(a)] = '\0'; printf("%s\n", a); return 0; }