Я читаю K & RC, в основном для того, чтобы чистить мои навыки C, и, пытаясь закодировать программу, чтобы отменить заданную строку, и у меня есть ошибка, которая наносит урон, что, хуже всего, я не могу отлаживать - и не знаю, что может быть причиной этого.Перестановка строк в C: Что я делаю неправильно?
Мой код выглядит следующим образом:
#include <stdio.h>
#include <string.h>
char * reverse(char *string);
int main(int argc, char *argv[])
{
printf("Please input a string: \t");
char string[256];
scanf("%s", string);
char *reversed = reverse(string);
printf("The reversed string is %s\n", reversed);
return 0;
}
char * reverse(char string[])
{
int size = strlen(string);
printf("DEBUG: The size of the string that we got as input was: %d\n", size);
int counter;
char reversed[size + 1];
for(counter = size - 1; counter >= 0; counter--) {
reversed[size - counter] = string[counter];
printf("DEBUG: The character copied now was %c and was at index %d\n", string[counter], counter);
}
reversed[size + 1] = '\0';
printf("DEBUG: The reversed string is %s\n", reversed);
return reversed;
}
(Пожалуйста, простите отладочные, что засоряют код логики Кроме того, не стесняйтесь, чтобы исправить любую ошибку, вы можете увидеть, а также чувствовать себя свободно. внести предложения по его улучшению)
Теперь мой код работает (по большей части), но ошибка в том, что он копирует символы, которые я не вводил. Ниже приведены (смешные) Результаты двух тестовых прогонов:
Первый:
[email protected]:~/SoftwareExperiments$ ./reverse
Please input a string: fotis
DEBUG: The size of the string that we got as input was: 5
DEBUG: The character copied now was s and was at index 4
DEBUG: The character copied now was i and was at index 3
DEBUG: The character copied now was t and was at index 2
DEBUG: The character copied now was o and was at index 1
DEBUG: The character copied now was f and was at index 0
DEBUG: The reversed string is $sitof
The reversed string is $sitof
(Обратите внимание на $
)
и второе:
[email protected]:~/SoftwareExperiments$ ./reverse
Please input a string: lol
DEBUG: The size of the string that we got as input was: 3
DEBUG: The character copied now was l and was at index 2
DEBUG: The character copied now was o and was at index 1
DEBUG: The character copied now was l and was at index 0
DEBUG: The reversed string is lol
The reversed string is lol
Более точно изображен здесь:
Может кто-то более знающий и опытный, чем мне объяснить мне, что случилось с моим кодом, или, возможно, дать мне подсказку, почему я столкнулся это расстраивает ошибка?
Не могли бы вы разработать еще немного о том, почему это проблема? Я получил предупреждение от gcc, и, как вы можете видеть, оператор 'DEBUG' внутри этой функции также демонстрирует это поведение. – NlightNFotis
Переменная, являющаяся локальной, не является проблемой. Это * автоматический * есть. – 2013-04-19 19:32:29
Ребята, ребята, я не слепой, и я могу читать выход компилятора. Я знал, что это проблема, будь то маленькая или большая. ** Понимаете, у меня есть проблемы с оператором DEBUG внутри функции, прежде чем управление вернется в 'main'. ** – NlightNFotis