从C中具有多个NULL’\ 0’的函数返回字符串

我在压缩字符串。 并且压缩字符串有时在结束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; 压缩器function的所有其他字符都不在这里。 有没有办法显示所有字符串。

 #include  #include  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 

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

您可以通过以下方式定义function

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

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

 #include  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 

使用std::string解决方案:

 #include  #include  #include  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(cout,"")); } 

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

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