#1 31. August 2016 Hallo Leute, hänge beim Verständnis eines kurzen Skripts voll durch. Code: /* strxcat.c */ #include <stdio.h> #include <stdarg.h> #include <string.h> #include <stdlib.h> #define MAX 50 void strxcat(int n_strings, ...) { va_list zeiger; char *quelle, *ziel, *p; va_start(zeiger,n_strings); /* nun auf den Zielstring */ ziel = va_arg(zeiger,char *); p = ziel; /* am Ende vom Zielstring */ ziel+=strlen(ziel); if( (ziel-p) > MAX) { printf("!!!Maximale Anzahl an Zeichen ueberschritten!!!\n"); return; } while(--n_strings > 0) { /* Quelle einlesen */ quelle = va_arg(zeiger, char *); /* jetzt Zeichen für Zeichen an ziel */ while(*quelle) { *ziel++ = *quelle++; if( (ziel-p) > MAX) { printf("!Maximale Anzahl an Zeichen ueberschritten!\n"); exit(EXIT_FAILURE); } } } *ziel = '\0'; } int main(void) { char string[MAX] = "Test : "; char string2[] = " Und"; strxcat(3, string, "hallo " , "welt"); printf("%s\n",string); strxcat(5, string, string2, " noch", " ein", " Test"); printf("%s\n",string); /*Und nun ein Fehler mit Absicht*/ strxcat(4, string , " Ueberlauf", " von", " MAX"); printf("%s\n",string); return EXIT_SUCCESS; } Es geht mir dabei um die Zeile: *ziel++ = *quelle++; Irgendwie macht es für mich anders mehr Sinn: *ziel = *quelle++; Vielleicht kann mir das jemand kurz erklären. Gruss, gutschy + Multi-Zitat Zitieren
#2 31. August 2016 AW: C: Variable Argumentlisten Das * deutet auf einen Pointer hin, dieser besteht nur aus einer Adresse, an welcher Daten gespeichert sein können. Das läuft also so ab, das die Adresse der quelle in den ziel pointer gespeichert wird und anschließend das ++ durchgeführt wird was beide Zeiger (Pointer) deren enthaltene Adresse hochzählt und damit auf das nächste "Zeichen" zeigt. Er spart sich praktisch eine eine Zeile Code (ziel++ und quelle++ extra) Ka ob das stimmt, ich hab seit 10 Jahren kein C++ mehr gemacht + Multi-Zitat Zitieren
#3 1. September 2016 AW: C: Variable Argumentlisten Ahhh, danke raid-rush, es wierd erst der Zeiger übertragen und dann wird hochgezählt. + Multi-Zitat Zitieren