Я работаю над проблемой обращения строк, когда пытаюсь обменять значения с двух сторон друг на друга.Как часть обратной функции, у меня есть строка, которая проверяет, достиг ли указатель символа конца строки (в форме while(*end!= '\0')
).Однако, похоже, это не работает, и в конце цикла while, когда я отменяю ссылку «end», я получаю пустое значение.Когда я использую (while(*end)
), все работает отлично, но я должен затем уменьшить мой указатель «конец», чтобы убедиться, что я получаю доступ к последнему элементу моей строки.Почему я не могу проверить указатель на строковый литерал '\ 0'?
#include<stdio.h>
void reverse(char* s);
void main(){
char str[]="abcdef";
printf("%s\n",str);
reverse(str);
printf("%s\n",str);
}
void reverse(char* p){
char* start = p;
char* end = p;
char tmp;
int length =0;
while(*end!='\0'){
end+=1;
length+=1;
}
printf("%c\n",*end); // problem line
int c;
for (c = 0; c < length/2; c++)
{
tmp = *start;
*start = *end;
*end = tmp;
start++;
end--;
}
//printf("%s\n",p);
}