Hallo zusammen!
Die erste Programmiersprache die ich gelernt habe war Visual Basic. Gerade bin ich dabei mich in C und C++ einzuarbeiten. Aus Basic kenne ich viele komfortable String-Funktionen. Das gibt es so in C ja nicht. Alleine schon string1 = string2 + string3 führt zu einem Fehler. Mit einem C-Buch habe ich mich jetzt einigermaßen an die Nachteile aber auch Vorteile von Strings in C gewöhnt. Zu dem nachstehenden Quelltext in C (nicht C++) habe ich drei Fragen, wobei diese als Kommentare im Quelltext eingebettet sind und würde mich freuen wenn mir jemand helfen könnte:
#include
#include
#include
int main(int argc, char *argv[]){
int x;
char str1[] = „Hello World!“;
char str2[] = "First part ";
char str3[] = „of a splitted string.“;
char str4[] = „This PC runs my programm!“;
/* str1 soll rückwärtsgeschrieben ausgegeben werden: */
char buffer1[sizeof(str1)];
/* Wenn ich das Programm debuge enthält an dieser Stelle buffer1 den Wert von str4. Warum ist das so und ist das richtig? */
for(x = sizeof(str1) - 2; x >= 0; x–) buffer1[sizeof(str1) - 2 - x] = str1[x];
buffer1[sizeof(str1) - 1] = 0;
/* Obwohl buffer1 die Größe von str1 besitzt stehen nach „!dlroW olleH“ ohne den Befehl „buffer1[sizeof(str1) - 1] = 0“ noch ein paar Hieroglyphen und dann der Inhalt von str4. Das hieße ja aber das buffer1 größer ist als str1. Quasi schiebt das Programm str4 nach rechts und setzt meinen Text und ein paar Hieroglyphen davor. Warum ist das so und kann ich das irgendwie verhindern? Oder anders gefragt, wie muss das richtig aussehen damit zum einen bufer1 wirklich die Größe von str1 besitzt und str4 darin nicht mehr auftaucht? */
printf("%s %s\n", str1, buffer1);
/* In str4 ist „PC“ durch „computer“ zu ersetzen. Dazu muss als erstes die Position von „PC“ in str4 ermittelt werden, dann das Array str4 in seiner Dimension vergrößert werden und schließlich „PC“ ersetzen: */
char buffer3[] = „PC“;
char buffer4[] = „computer“;
char buffer5[sizeof(str4) - sizeof(buffer3) + sizeof(buffer3)] = „“;
memcpy(buffer5, str4, strlen(str4) - strlen(strstr(str4, buffer3)));
strcat(buffer5, buffer4);
strcat(buffer5, strchr(strstr(str4, buffer3), ’ '));
printf("‚PC‘ replaced by ‚computer‘: %s\n", buffer5);
/* Die Frage hierzu ist recht simple: Aus Visual Basic kenne ich die mid-Funktion, die das macht was ich hier programmiert habe. In C gibt es eine solche Funktion nicht. Meine Frage ist nun ob das nicht auch eleganter geht, vor allem im Hinblick auf aufwendige Programme und Rechnerressourcen? */
return 0;
}
// Grüße C. Penkwitt