从具有多个NULL的函数返回字符串' \ 0'在C.

时间:2014-09-14 16:26:09

标签: c string compression clr

我在压缩字符串。并且压缩字符串有时在结束NULL之前具有NULL字符。我想返回字符串直到结束null。但压缩器函数返回sting直到第一个NULL发生。请帮帮我。

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

   }

输出为:压缩值= bk; 压缩器功能的所有其他字符都不在这里。有没有办法显示所有字符串。

3 个答案:

答案 0 :(得分:1)

该函数返回“整个字符串”。它是printf,输出它直到遇到空字符。

您可以通过以下方式定义功能

char * compressor( const char* source, size_t *result_len );

要了解此问题,请考虑以下代码

#include <stdio.h>

char * compressor( const char* source, size_t *result_len )
{
    char *compressed_string = "bk\0dk";
    *result_len = sizeof( "bk\0dk" );

    return compressed_string;
}


int main( void )
{
    char* str;
    size_t n;

    str = compressor( "Muhammad Ashikuzzaman", &n );

    int i;
    printf( "Compressed Value = " );

    for ( char *p = str; n; n -= i + 1, p += i + 1 )
    {
        i = printf( "%s", p );
    }

    return 0;
}

输出

Compressed Value = bkdk

答案 1 :(得分:0)

#include <stdio.h>
#include <stdlib.h>
char* func(char *str, int *length)
        {
          int i;
          *length=9;//Put string length you calculated
          str=(char*)malloc(*length*sizeof(char));
      for(i=0;i<5;i++)
        str[i]=i+65;
        str[5]=0;
        str[6]=65;
        str[7]=67;
        str[8]=0;   
          return str;
        }
int main()
{
    char *str;
    int i,length=0; 
    str=func("Muhammad Ashikuzzaman",&length); 
    for(i=0;i<length;i++)
         printf("%c",str[i]);
    scanf("%d",&i);
    return 0;
}

答案 2 :(得分:0)

使用std::string的解决方案:

#include <string>
#include <iostream>
#include <iterator>

std::string compressor(char* str)
{
   char *compressed_string;
   int len;  // this is the size of the compressed data
   //...
   // compress the data and assume that len has the number of characters
   //...
   std::string theString(compressed_string, len);
   // clean up any memory here.
   //...
   return theString;
}

using namespace std;

int main()
{
    std::string str = compressor("Muhammad Ashikuzzaman");
    std::copy(str.begin(), str.end(), std::ostream_iterator<char>(cout,""));
}

注意std :: string的用法,以及如何使用copy算法函数输出信息。使用copy而不是printf的原因是为了确保打印所有字符,包括(不可见的)嵌入的NULL。

此外,通过调用str::size()可以轻松检索压缩数据的大小。