Возможный дубликат:
Почему возникает ошибка сегментации при записи в строку?
Я хочу написать функцию, которая меняет данную строку, переданную в нее.
Но я не могу. Если я поставлю функцию doReverse
(см. Код ниже) с помощью массива символов, мой код работает хорошо.
Я не могу понять, почему это не работает.
Я могу получить доступ к str[0]
в doReverse
, но я не могу изменить любое значение массива с помощью указателя char. Любые идеи?
void doReverse(char *str) {
str[0] = 'b';
}
void main(void) {
char *str = "abc";
doReverse(str);
puts(str);
}
Обновление:
Я знаю, как писать обратную функцию, передавая ему массив символов:
void reverse1(char p[]) {
int i, temp, y;
for (i = 0, y = strlen(p); i < y; ++i, --y) {
temp = p[y-1];
p[y-1] = p[i];
p[i] = temp;
}
}
Но я хочу написать еще одну версию, в которой в качестве параметра указывается указатель char.