Ошибка сегментации
Вы получаете ошибку сегментации, потому что строка «банан» является литералом, что означает, что она доступна только для чтения.
В вашем коде вы пытаетесь сделатьs [i] ++, который увеличивает значение одного из символов .. Что вы не можете сделать, потому что он доступен только для чтения.без него ваш код компилировался и работал нормально.
Решение
Теперь ответим на ваш вопрос.Вы указали, что решение должно возвращать результат, а не распечатывать его, и, поскольку литерал доступен только для чтения, нам нужно создать новую строку.Я решил использовать malloc так, чтобы размер новой строки соответствовал размеру старой, но вы также можете выделить фиксированный буфер.
Следующий код выводит «bnn»:
#include <stdio.h>
#include <string.h> // For strlen
#include <stdlib.h> // For malloc & free
char* clean(char* s, int c);
int main() {
char* result = clean("banana", 'a');
printf("%s\n", result);
free(result); // Everything allocated with malloc must be freed.
return 0;
}
char* clean(char* s, int c) {
int length = strlen(s), i = 0, j = 0;
char* result = malloc(length + 1); // +1 for null terminator.
memset(result, 0, length + 1);
for (i; i < length; i++) {
if (s[i] != c) {
result[j] = s[i];
j++;
}
}
return result;
}