在函数中填充new创建的字符串

时间:2011-11-24 20:24:35

标签: c++ string function pointers new-operator

#include <iostream>
using namespace std;

void generCad(int n, char* cad){

int longi = 1, lastchar, m = n; // calculating lenght of binary string
char actual;
do{
    longi++;
    n /= 2;
}while(n/2 != 0);
cad = new char[longi];
lastchar = longi - 1;
do{
    actual = m % 2;
    cad[lastchar] = actual;
    m /= 2;
    lastchar--;
}while(m/2 != 0);
cout << "Cadena = " << cad;

}

嗨!我在这里遇到问题,因为我需要一个为数字n创建二进制字符串的函数。我认为这个过程“很好”但是cout没有打印任何东西,我不知道如何使用new运算符填充我创建的字符串

3 个答案:

答案 0 :(得分:1)

代码应如下所示:

void generCad(int n, char** cad)
{
    int m = n, c = 1;

    while (m >>= 1) // this divides the m by 2, but by shifting which is faster
        c++; // here you counts the bits
    *cad = new char[c + 1];
    (*cad)[c] = 0; // here you end the string by 0 character

    while (n)
    {
        (*cad)[--c] = n % 2 + '0';
        n /= 2;
    }
            cout << "Cadena = " << *cad;
}

请注意,cad现在是char **而不是char *。如果它只是char *那么你没有像你期望的那样得到函数外的指针。如果你不需要这个函数之外的字符串,那么它可以作为char *传递,但是在离开函数之前不要忘记删除cad(好习惯; - ))

编辑:

这段代码可能更具可读性并且也是如此:

char * toBin(int n)
{
    int m = n, c = 1;

    while (m >>= 1) // this divides the m by 2, but by shifting which is faster
        c++; // here you counts the bits
    char *cad = new char[c + 1];
    cad[c] = 0; // here you end the string by 0 character

    while (n)
    {
        cad[--c] = n % 2 + '0';
        n /= 2;
    }
    cout << "Cadena = " << cad;
    return cad;
}

int main()
{
    char *buff;
    buff = toBin(16);

    delete [] buff;

    return 1;

}

答案 1 :(得分:0)

actual包含数字 01,而非字符 '0'和{{1} }。要转换,请使用:

'1'

此外,由于您使用cad[lastchar] = actual + '0'; 作为C字符串,因此需要分配额外的字符并添加NUL终止符。

答案 2 :(得分:0)

actual = m % 2;

应该是:

actual = m % 2 + '0';