Ik ben een beetje door Kernighan en Ritchie aan het werken en kom daar de opdracht tegen een functie 'squeeze' te schrijven die alle karakters uit het tweede argument verwijdert uit de string in het eerste argument. Mijn poging:
Helaas, dit heeft een segmentation fault. Nu zoek ik me al een tijdje suf, heb ook een werkende oplossing voor dit probleem gevonden, maar ik kan mijn vinger niet op het probleem leggen. De goede oplossing bewerkt ook de doorgegeven 'string', de indices worden niet negatief (ik heb er al hordes printfs tussen gehad om de waarden te controleren) en toch wordt er dus blijkbaar toegang tot geheugen gepoogd dat niet van mij is, op de regel s1[k++] = s1[j]. Wat is er mis met deze toekenning en waarom mag vrijwel hetzelfde wel in het voorbeeld?
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
| #include <stdio.h>
void squeeze(char s1[], char s2[]) {
int i, j, k;
for( i = 0; s2[i] != '\0'; i++ )
{
for ( j = k = 0; s1[j] != '\0'; j++ )
{
if ( s1[j] != s2[i] )
{
s1[k++] = s1[j];
}
}
s1[k] = '\0';
}
printf("%s",s1);
return;
}
int main() {
squeeze("ali baba and the 40 bandits", "ab ");
return 0;
} |
Helaas, dit heeft een segmentation fault. Nu zoek ik me al een tijdje suf, heb ook een werkende oplossing voor dit probleem gevonden, maar ik kan mijn vinger niet op het probleem leggen. De goede oplossing bewerkt ook de doorgegeven 'string', de indices worden niet negatief (ik heb er al hordes printfs tussen gehad om de waarden te controleren) en toch wordt er dus blijkbaar toegang tot geheugen gepoogd dat niet van mij is, op de regel s1[k++] = s1[j]. Wat is er mis met deze toekenning en waarom mag vrijwel hetzelfde wel in het voorbeeld?
Wie trösten wir uns, die Mörder aller Mörder?