#c
#c
Вопрос:
У меня есть простая программа, которая считывает пару символов из char[]
массива и выводит каждую пару на консоль, все в одной строке — по какой-то причине к выводу добавляются некоторые ложные новые строки (и пробелы).
Я удалил использование библиотек str (кроме strlen
), которые могут добавлять новые строки в конце строк, но я все еще не понимаю, что происходит.
Программа:
#include <stdio.h>
#include <string.h>
char input[] = "aabbaabbaabbaabbaabb";
int main() {
int i;
char c[2];
size_t input_length = strlen(input);
for (i=0; i<input_length; i =2) {
c[0] = input[i];
c[1] = input[i 1];
printf("%s", c);
}
printf("n");
return 0;
}
Ожидаемый результат:
aabbaabbabbaabbaabb
Вывод:
aabbaabbabb
aa
bbaabb
Почему в выходных данных есть новые строки и пробелы? (Обратите внимание, что в 1-й строке a
в конце есть один — не удалось определить, почему)
Использование Apple clang версии 11.0.0 (clang-1100.0.33.16), хотя я сомневаюсь, имеет ли это значение.
Комментарии:
1. Вы забыли завершить нулевым завершением
c
. Измените его наchar c[3];
и установитеc[2] = '';
Без этого%s
формат будет выполняться до концаc
и начнет пытаться печатать все, с чем он столкнется.
Ответ №1:
%s
работает правильно, если ваша строка содержит нулевой символ ( ''
) . Если это не так (как в вашем случае), то printf
функция продолжает печатать символы, пока не найдет ''
где-нибудь в памяти. Помните, что string
в C последовательность символов заканчивается ''
. Это причина, по которой ваш код ведет себя не так, как вы ожидали.
С другой стороны, %c
печатается только один символ, поэтому вы можете использовать:
printf("%c%c", c[0],c[1]);
Если вы продолжаете использовать %s
, в этом случае вам придется использовать %.2s
. Вы, наверное, уже знаете, что .
это показывает точность в C. Точность в string
означает максимальное количество символов, которые вы хотите напечатать. Таким образом, использование .2
результатов приводит к печати первых двух символов в вашей строке. Не нужно ждать ''
!
printf("%.2s", c);
Я также даю решение @Tom Karzes. Вы должны изменить и добавить эти строки:
char c[3];
c[2] = '';