Vollständige Version anzeigen : C: Variable Argumentlisten


Gutschy
30.08.2016, 23:47

Hallo Leute,

hänge beim Verständnis eines kurzen Skripts voll durch;
/* 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

Hardware Preisvergleich | Amazon Blitzangebote!

Videos zum Thema
Video Loading...
raid-rush
31.08.2016, 08:56

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 :D


Gutschy
01.09.2016, 00:03

Ahhh, danke raid-rush, es wierd erst der Zeiger übertragen und dann wird hochgezählt. :)


Ähnliche Themen zu C: Variable Argumentlisten
  • PHP: Variable
    hallo leute, ich habe ne kurze (schwere) frage zu php. ich weiß nicht wie ich eine variable in eine andere datei übernehmen kann. das auslesen von formularen stellt kein problem dar. da dies ja mit get oder post funktioniert. kurzes bsp;: ich habe eine datei namens "flik;php" in dieser steh [...]

  • Variable mit Variable erstellen (?)
    Das wird nicht funktionieren! Was du allerdings machen kannst (was vom Prinzip her das gleiche ist) ist, dass du ein Array erstellst und dieses dann während der Laufzeit dynamisch erweiterst. Somit hast du dann auch ein Array, das z;b. genauso Viele Felder hat, wie es Schleifendurchläufe gegeben [...]

  • [PHP] Variable in $_GET[Variable] schreiben
    Hey liebe Community, schnelle beschreibung: Formular mit: <form..;> <input type="text" name="text"> </form> Anschließend in der nächsten Datei möchte ich gerne dieses feld text auslesen, wobei der name text variable ist und vorher im formular per mysql ausgelesen wurde und anschließen [...]

  • [PHP] POST Variable mit Variable vergleichen!
    Hallo! Ich habe grade ein kleines Problem mit einem Stück coding von mir. Mein Script liest einen Benutzernamen und ein Passwort über ein Formular ein und übergibt die Werte an eine Funktion in dem Action Script. Eingabe Formular: <html> <head> <title> Test </title> </head> <body> <form action= [...]



raid-rush.ws | Imprint & Contact pr