2012-10-17 3 views
-3

Это точно, но я довольно новичок в C, и я не понимаю, почему следующий код прослушивает. Код простой позиции реверсивно символ строки:Реверсирование слова в c

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 

int main() 
{ int i,length; 
    char *word; 
    scanf("%s",word); 
    length = strlen(word); 
    char res[length]; 

    for(i=0;i<length;i++){ 
     res[i]=word[length-1-i]; 
     printf("%d",res[i]);} 
} 

, когда я ввожу строку, я получаю сообщение: (lldb) в консоли, а в отладчик: MOVB% Al (% RCX) , EXC_BAD_ACCESS (код = 1, адрес = 0x0)

+2

Фраза «код прослушивает» не является встроенным сообщением об ошибке в C. –

+1

Вы имеете в виду «реверсирование строки», например. 'abcdef' ->' fedcba'? –

+2

Если вы не объясните проблему, как вы ожидаете, что люди предоставят ответ? –

ответ

5
char *word; 
scanf("%s",word); 

Недопустимая запись в несуществующую ячейку памяти.

Создайте такой массив: char word[MAXSIZE] или используйте malloc или calloc для динамического распределения памяти. И использовать fgets не scanf

Некоторые ссылки, чтобы вы на своем веселом пути: malloc, calloc, fgets

+0

Спасибо, это сработало! У меня все еще проблема, потому что слово, кажется, не распознает белые пробелы (если я ставлю «b», я получаю только «b»). Btw, я отредактировал мой пост, но как я могу получить свой downvote off – user1611830

+0

слово - это просто переменная. Ваша проблема - scanf. Вот почему я сказал использовать fgets. И о том, чтобы вытащить downvotes, я не могу снять это для вас. Только те, кто остановил вас, могут. –

1
printf("%d",res[i]); 

Использование %c вместо %d, если вы хотите выводить символ вместо байта стоимость.

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