2016-04-08 3 views
0

Мы создали массив символов с фиксированной длиной. Теперь мы пишем слово или предложение внутри этого массива. Однако длина этого слова-предложения короче длины массива char, поэтому, когда мы печатаем сообщение с функцией printf, также печатается ряд символов дерьма. Мы хотели бы удалить все эти символы, даже если длина написанного сообщения является переменной. Спасибо!Удаление нежелательных символов

+2

Строки должны быть пустыми (т.е. должны заканчиваться на '\ 0') (ps: в следующий раз укажите код вместо описания того, что вы хотите, чтобы ваш код делал, два не всегда совпадают) – Borgleader

+0

@Borgleader: Ответы спуститься туда приятель ↓↓↓↓↓↓ –

+5

....................................... ....................... <вставить ответ здесь> –

ответ

0

Вы считали, что не используете размер фиксированного массива, если это не то, что вы хотите? Вы могли бы просто использовать char* вместо этого и назначить его размер динамически.

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

+0

Не используйте символ 'char *'. Не динамически выделяйте буферы char. У нас были библиотечные возможности для этого для нас с 1998 года. –

3

Строки C заканчиваются байтом NUL ('\0'). Если у вас нет этого терминатора, то printf не знает, что ваша строка закончилась. Решение состоит в том, чтобы поставить \0 после вашего слова в массиве.

Примечание: научитесь использовать std::string, который управляет этим для вас.

0

Кроме этого, если ваш буфер должен быть просто байтовым массивом, а не строкой (завершенным нулем), вы можете использовать fwrite вместо fprintf для сброса содержимого.

Но в целом, я согласен с другими, что лучше использовать std :: string.

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