Я сжимаю строку. И сжатая строка иногда имеет NULL-символ внутри до конца NULL. Я хочу вернуть строку до конца null. Но функция компрессора возвращает жало до появления первого NULL. Я задал вопрос до этого раньше. Но последовательно мне также нужно решение в C++ сейчас и в следующем С#. Пожалуйста, помогите мне. Спасибо.
char* compressor(char* str)
{
char *compressed_string;
//After some calculation
compressed_string="bk'NULL'dk";// at the last here is automatic an NULL we all know
return compressed_string;
}
void main()
{
char* str;
str=compressor("Muhammad Ashikuzzaman");
printf("Compressed Value = %s",str);
}
Выход: Сжатое value = bk; И всех других персонажей из функции компрессора здесь нет. Есть ли способ показать всю строку.
Основная проблема, которую вы испытываете, заключается в том, что алгоритмы сжатия работают с двоичными данными, а не с текстом. Если вы сжимаете что-то, тогда ожидайте, что некоторые из сжатых байтов будут равны нулю. Таким образом, сжатые данные не могут быть сохранены в строке с нулевым завершением.
Вам нужно изменить свое мышление для работы с двоичными данными.
Для сжатия выполните следующие действия:
unsigned char
.unsigned char
, который снова даст массив unsigned char
, но теперь сжат.Чтобы распаковать, вы просто отменяете эти шаги.
Поскольку вы пишете код C++, вам будет рекомендовано использовать стандартные контейнеры. Например, std::string
или std::wstring
и std::vector<T>
.
Точно такие же принципы применяются на всех языках. Когда вы приходите, чтобы закодировать это на С#, вам нужно преобразовать из текста в двоичный. Используйте Encoding.GetBytes()
для этого. Это дает байтовый массив, byte[]
. Сжатие этого в другой массив байтов. И так далее.
Но вы действительно должны сначала преодолеть это желание попытаться сохранить двоичные данные в текстовых типах данных.