Я написал упражнение «обратная строка» в качестве подготовки к моим предстоящим собеседованиям, однако, когда я пытаюсь запустить тест по нескольким элементам своего массива, я получаю segfault.обратная строка является дефектом seg
В принципе, если я скомпилирую код ниже с помощью -DWORKS, cstr со строкой «zip it shrimp» будет изменен как ожидалось. Однако, если оставить это будет компилировать код, который использует массив указателей, но терпит неудачу на первой итерации (т.е. ПРМ [я], где я = 0):
*s = *e;
Кажется, я припоминаю, что мы не можем измените указатель напрямую, но я не могу представить, как можно обойти это. Любая помощь в понимании того, что именно ведет к ошибке, и как я могу это исправить и понять это лучше, поэтому я не повторяю ее снова, было бы весьма признательно. Весь код ниже.
#include <stdio.h>
char *str[] = { "zip it shrimp", "", "a", "ab", "abc" };
char cstr[] = "zip it shrimp";
void reverse(char *str)
{
char *s = str;
char *e = s + strlen(s) - 1;
while (s < e) {
char c = *s;
*s = *e;
*e = c;
s++;
e--;
}
}
int main(int argc, char **argv)
{
int i;
#ifdef WORKS
reverse(&cstr);
printf("%s\n", cstr);
#else
for (i = 0; i < 4; i++) {
reverse(str[i]);
printf("%s\n", str[i]);
}
#endif
return 0;
}
Спасибо! Это очень понятно, и я ценю ваш практический пример :). – user3043746