我在压缩字符串。并且压缩字符串有时在结束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; 压缩器功能的所有其他字符都不在这里。有没有办法显示所有字符串。
答案 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()
可以轻松检索压缩数据的大小。