Ich möchte mich wieder mal etwas mit C beschäftigen, bzw. mich überhaupt mal ernsthaft mit C beschäftigen. (Bisher habe ich nur ein Jahr an der Berufsschule C programmiert, didaktisch sinnentleert mit Microsoft Visual Studio...) Nun habe ich mir das C-Buch schlechthin geholt: "The C-Programming-Language" von Kernigham/Ritchie. Ich muss sagen, das Buch gefällt mir sehr gut. Wer schon einmal programmiert hat, wird die - doch teils etwas anspruchsvolleren - Aufgaben und die hohe Informationsdichte gut mögen. Bei Aufgabe 2.4 (Seite 48 - vielleicht hat ja das Buch jemand zur Hand), geht es um die Erweiterung einer Funktion namens "squeeze". Ich habe die Aufgabe gelöst und erhalte jeweils einen Segmentation fault. Hier der Code ("squeeze" soll alle Zeichen aus s1 entfernen, die ebenfalls in s2 vorkommen):
Code: Alles auswählen
#include <stdio.h>
void squeeze(char *, char *);
int main(int argc, char *argv[])
{
char *s1 = "Das ist ein Test!";
char *s2 = "e";
squeeze(s1, s2);
printf("%s", s1);
return 0;
}
void squeeze(char s1[], char *s2)
{
int r1, r2, w, c_ok;
for (r1 = 0, w = 0; s1[r1] != '\0'; r1++)
{
for(r2 = 0, c_ok = 1; s2[r2] != '\0'; r2++)
{
if (s1[r1] == s2[r2])
{
c_ok = 0;
break;
}
}
if (c_ok)
s1[w++] = s1[r1];
}
s1[w] = '\0';
}
Code: Alles auswählen
#include <stdio.h>
void squeeze(char *, char);
int main(int argc, char *argv[])
{
char *s = "Das ist ein Test!";
char c = 'c';
squeeze(s, c);
return 0;
}
void squeeze(char s[], char c)
{
int i, j;
for (i = j = 0; s[i] != '\0'; i++)
if (s[i] != c)
s[j++] = s[i];
s[j] = '\0';
}
Code: Alles auswählen
#include <stdio.h>
int main(int argc, char *argv[])
{
char *s = "Dilbert";
s[0] = 'G';
return 0;
}
Besten Dank!