Files
info2_uebungen/07_zeiger_const/stringtausch.c
T
2026-11-12 10:24:05 +01:00

66 lines
2.1 KiB
C

/*
* Im folgenden Programm hat sich ein Fehler eingeschlichen. Eigentlich sollen die Zeichenketten vertauscht
* ausgegeben werden. Allerdings klappt etwas nicht.
*
* 1. Lassen Sie zunächst das Programm laufen und finden Sie heraus, warum die Zeichenketten string1 und string2 nicht vertauscht werden.
* 2. Sorgen Sie nun dafür, dass die Zeichenketten vertauscht werden. Ändern Sie dafür nur den Funktionsinhalt von tauscheStrings(...)
* 3. Schreiben Sie nun eine neue Tauschfunktion, die die ursprünglich angedachte Funktionalität umsetzt. Es sollen also nur die Zeiger vertauscht
* werden. Der Array-Inhalt soll unverändert bleiben.
*/
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#define MAX_STRING_LEN 8
void tauscheStringsFalsch(char *zgr1, char *zgr2);
void tauscheStringsInhalt(char *zgr1, char *zgr2);
void tauscheStringsZgr(char **zgr1, char **zgr2);
int main()
{
char strings[][MAX_STRING_LEN] = {"String1", "String2"};
char *string1 = strings[0];
char *string2 = strings[1];
printf("Vor Tausch:\n");
printf("Inhalt von string1: %s\n", string1);
printf("Inhalt von string2: %s\n", string2);
printf("Inhalt von strings[0]: %s\n", strings[0]);
printf("Inhalt von strings[1]: %s\n", strings[1]);
//tauscheStringsFalsch(string1, string2);
//tauscheStringsInhalt(string1, string2);
tauscheStringsZgr(&string1, &string2);
printf("\nNach Tausch:\n");
printf("Inhalt von string1: %s\n", string1);
printf("Inhalt von string2: %s\n", string2);
printf("Inhalt von strings[0]: %s\n", strings[0]);
printf("Inhalt von strings[1]: %s\n", strings[1]);
return EXIT_SUCCESS;
}
void tauscheStringsFalsch(char *zgr1, char *zgr2)
{
char *tmp = zgr1;
zgr1 = zgr2;
zgr2 = tmp;
}
void tauscheStringsInhalt(char *zgr1, char *zgr2)
{
char tmp[MAX_STRING_LEN];
strncpy(tmp, zgr1, MAX_STRING_LEN);
strncpy(zgr1, zgr2, MAX_STRING_LEN);
strncpy(zgr2, tmp, MAX_STRING_LEN);
}
void tauscheStringsZgr(char **zgr1, char **zgr2)
{
char *tmp = *zgr1;
*zgr1 = *zgr2;
*zgr2 = tmp;
}