Он просто печатает пустую строку.
Вы несчастливы, но неудивительно, что неопределенное поведение вашего кода проявляется в печати явно пустой строки. Это было бы более показательным для характера проблемы, если бы она вызвала segfault или какое-либо другое нарушение памяти, что было бы вполне уместно.
Почему это происходит
Поскольку вы выполняете арифметику c для указателя , а не изменяете то, на что он указывает. Это выражение ...
string += 'A';
... вычисляет сложение указателя string
с целочисленной символьной константой 'A'
(чье значение цифры c зависит от системы, но часто это код ASCII для заглавной буквы A), и результирующий указатель сохраняется в string
. Это заставляет string
указывать на нечто иное, чем это было ранее. Он никоим образом не изменяет содержимое памяти, на которую указывает string
.
, и есть ли простой способ объединить отдельные символы, начиная с пустой строки, если я не знаю как долго это будет?
Если у вас есть верхняя граница того, как долго могут быть данные, тогда проще всего объявить достаточно большой массив для хранения данные и инициализировать их со всеми нулями ...
char string[MAX_LEN + 1] = {0};
Затем вы можете добавить один символ, записав его в следующий доступный индекс (какой индекс вы можете отслеживать или вычислять при необходимости с помощью strlen()
):
unsigned next_index = 0;
string[next_index++] = 'A';
string[next_index++] = 'B';
string[next_index++] = 'C';
Обратите внимание, что это основано на инициализации нуля - которая не является автоматической c для локальных переменных - чтобы гарантировать, что содержимое массива всегда составляет строка с нулевым символом в конце . Сделав это, вы можете напечатать ожидаемый результат:
printf("%s\n", string);
Если вы заранее не знали разумную верхнюю границу того, какова длина строки, или если верхняя граница была чрезвычайно большой, то вы потребуется полагаться на динамическое выделение и перераспределение памяти c. Эту тему вы должны отложить на потом.