2016-07-24 6 views
-1

Это программа для преобразования строк без использования функций strlen() и strrev(). Пожалуйста, помогите мне относительно этого кода: функция length показывает 11, но функция reverse не работает.Почему эта строка обратная программа не работает?

#include <stdio.h> 
#include <conio.h> 

int length(char*); 
char *reverse(char*); 

main() { 
    printf("%d", length("himanshupal")); 
    printf("%s", reverse("himanshupal")); 
    getch(); 
} 

/* used to calculate the lenghth*/ 
int length(char *p) { 
    int l; 

    for (l = 0; *(p+l) != '\0'; l++); 
    return (l); 
} 

char *reverse(char *p) { // function for reversing the string 
          // l used for length 
    int i, l; 
    char t; 

    for (l = 0; *(p+l) != '\0'; l++); 
    for (i = 0; i < l/2; i++) { 
     t = *(p+i); 
     *(p+i) = *(p+l-1-i); 
     *(p+l-1-i) = t; 
    } 
    return (p); 
} 
+0

Когда вы говорите, что программа не работает, что вы имеете в виду под этим? Вы получаете ошибки сборки? Затем отправляйте точные ошибки, которые вы получаете. Вы получаете аварии? Затем запустите в отладчике, чтобы найти, где это происходит. Вы получаете неожиданный результат? Тогда, пожалуйста, покажите нам фактический и ожидаемый результат. Также, пожалуйста, [прочитайте о том, как задавать хорошие вопросы] (http://stackoverflow.com/help/how-to-ask). –

+2

Тип строкового литерала - 'const char *'. В любом случае ваша программа компиляции - это трагедия, которую каждый программист C должен изучить Hard Way. –

+0

Я сохраняю свою программу с длиной.exe. после выполнения функции продолжительности показывает 11. но после того, как окно зеленой линии запускает всплывающие окна и показывает, что length.exe не работает должным образом –

ответ

1

Строковые литералы неизменны в C и C++. Любая попытка изменить строковый литерал приводит к неопределенному поведению. :)

Вместо этого используйте массивы символов. например

int main(void) 
    //^^^^^^^^^^^^^^ 
    { 
     char s[] = "himanshupal"; 
     printf("%d\n", length(s)); 
     printf("%s\n", reverse(s)); 
     getch(); 
    } 

Примите во внимание, что лучше объявить длина функции как

size_t length(const char *); 
+0

благодарит брата за его работу, но что не так в моем коде –

+0

@HimanshuPal Вы используете строковый литерал в вызове printf («% s», reverse («himanshupal»)); и функция reverse пытается ее изменить. –

+0

, в каком смысле это изменение звонка? –

Смежные вопросы