Intereting Posts
Два метода указателя Почему kfifo.h так полно команд #define Как связать определенную версию разделяемой библиотеки в make-файле без использования LD_LIBRARY_PATH? Несколько кадров потеряно, если я использую av_read_frame в FFmpeg Каковы свойства объектов типа FILE Различия между собственным C-кодом запускаются в jni и запускаются в оболочке на Android Случайные целые числа в C, насколько плохо rand ()% N по сравнению с целочисленной арифметикой? Каковы его недостатки? Ошибка C: выражение должно иметь постоянное значение Сколько стилей написания функций существует в C? C получить режим из списка целых чисел Точки последовательности и побочные эффекты в C Проверка подписи приложения кодом Как эта программа C компилируется и выполняется с двумя основными функциями? Как я могу узнать, включен ли утечка Sanitizer во время компиляции? Являются ли константные выражения C оцененными во время компиляции или во время выполнения?

Строка с использованием указателей

Я пытаюсь изменить строку с помощью указателей. Когда я пытаюсь напечатать обратную строку вместо того, чтобы получать DCBA, я выхожу только как BA? Может ли кто-нибудь помочь мне в этом?

#include void reverse(char *); void main() { char str[5] = "ABCD"; reverse(str); } void reverse(char *str) { char *rev_str = str; char temp; while(*str) str++; --str; while(rev_str < str) { temp = *rev_str; *rev_str = *str; *str = temp; rev_str++; str--; } printf("reversed string is %s",str); } 

Вы теряете указатель на начало строки, поэтому, когда вы ее распечатываете, вы не начинаете с первого символа, потому что str больше не указывает на первый символ. Просто введите переменную-заполнителя, чтобы сохранить указатель на начало строки.

 void reverse(char *str) { char *begin = str; /* Keeps a pointer to the beginning of str */ char *rev_str = str; char temp; while(*str) str++; --str; while(rev_str < str) { temp = *rev_str; *rev_str = *str; *str = temp; rev_str++; str--; } printf("reversed string is %s\n", begin); } в void reverse(char *str) { char *begin = str; /* Keeps a pointer to the beginning of str */ char *rev_str = str; char temp; while(*str) str++; --str; while(rev_str < str) { temp = *rev_str; *rev_str = *str; *str = temp; rev_str++; str--; } printf("reversed string is %s\n", begin); } 
 char* strrev(chr* src) { char* dest int len=0, index=0 , rindex=0; while(*(src+len) != '\0') { len++ } rindex=len-1; while(rindex > =0) { *(dest+index) = *(src + rindex) index++; rindex--; } *(dest+index) = '\0'; return dest; }