2014-09-15 1 views
0

문자열을 압축하고 있습니다. 그리고 때때로 압축 된 문자열은 끝 NULL 앞에 NULL 문자를 가지고 있습니다. 끝 null.But 때까지 문자열을 반환하려면 압축기 함수는 첫 번째 NULL이 발생할 때까지 스팅을 반환합니다. 나는 그것에 대해 전에 c에 대해 질문을했다. 그러나 연속적으로 C++과 다음 C#에서 솔루션이 필요합니다. 도와주세요. 고마워.C++에서 여러 NULL ' 0'이있는 함수에서 문자열 반환

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); 

    } 

출력은 다음과 같습니다. Compressed Value = bk; 그리고 압축기 기능의 다른 모든 문자는 여기에 없습니다. 모든 문자열을 표시 할 수있는 방법이 있습니까?

+1

C++에서 shitty C를 쓰지 마십시오. – Puppy

+1

이 질문에 답변하지 않았습니까? : http://stackoverflow.com/questions/25835422/returning-string-from-function-having-multiple-null-0-in-c/25839786#25839786. 그 대답은 모든 null이있는 문자열을 반환 할뿐만 아니라 null을 포함하여 전체 문자열을 인쇄합니다 (보이지는 않지만). – PaulMcKenzie

+0

@Puppy C++에서도 필요합니다. –

답변

3

압축 알고리즘은 텍스트가 아닌 바이너리 데이터에서 작동한다는 근본적인 문제가 있습니다. 압축하면 뭔가 압축 된 바이트가 0이 될 것으로 예상됩니다. 따라서 압축 된 데이터는 null로 끝나는 문자열에 저장할 수 없습니다.

이진 데이터로 작업하려면 사고 방식을 변경해야합니다. 텍스트에서

  1. 변환은 일부 잘 정의 된 인코딩을 사용하여 이진하기 : 압축하려면

    는 다음을 수행합니다. 예를 들어, UTF-8. 그러면 배열은 unsigned char이됩니다.

  2. unsigned char을 압축하면 unsigned char의 배열이 다시 생성되지만 압축됩니다.

압축을 풀려면 다음 단계를 역으로 수행하면됩니다.

C++ 코드를 작성 했으므로 표준 컨테이너를 사용하는 것이 좋습니다. std::string 또는 std::wstringstd::vector<T>입니다.

모든 언어에서 똑같은 원칙이 적용됩니다. C#에서 코드를 작성하면 텍스트를 바이너리로 변환해야합니다. 그렇게하려면 Encoding.GetBytes()을 사용하십시오. 그러면 바이트 배열 byte[]이 생성됩니다. 다른 바이트 배열로 압축하십시오. 등등.

하지만 실제로는 텍스트 데이터 형식에 바이너리 데이터를 저장하려는이 욕구를 극복해야합니다.