Функция, изменяющая строку, меняет строку на пустую, а не на обратную - PullRequest
0 голосов
/ 05 октября 2019

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

вызывается в main(void).

Терминальное сообщение:

iplayzed@iplayzed-Lenovo-ideapad-330-15IKB:~/Egyetem/Progalap gyak 1.fv/3_hazi$ gcc -Wall -O2 -static -o my my.c
my.c: In function ‘main’:
my.c:30:5: warning: ignoring return value of ‘scanf’, declared with attribute warn_unused_result [-Wunused-result]
     scanf("%s",str);
     ^~~~~~~~~~~~~~~
iplayzed@iplayzed-Lenovo-ideapad-330-15IKB:~/Egyetem/Progalap gyak 1.fv/3_hazi$ ./my
asdf
String length: 4

The original string:"asdf"
The reversed string:""

В чем причина его изменения на пустое?

1 Ответ

2 голосов
/ 05 октября 2019

Индексы разворота немного отклонены на 1.

Рассмотрим размер = 4, затем для первой итерации (i = 0) код выполнится:

  1. buff = str [0]
  2. str [0] = str [4-0];
  3. str [4] = buff;

Напомним, что str [4] является завершающим NUL, поэтому код вставит NUL в первую позицию, поэтому возвращается пустая строка.

Это можно легко исправить с помощью:

buff=str[i]; 
str[i]=str[size-i-1];
str[size-i-1]=buff;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...