char to char *问题

时间:2013-07-03 18:37:44

标签: c++

我可以使用以下功能将char转换为char *

char* char_to_chars(char ch) {
    char ch2[10];
    ch2[0] = ch;
    char *ch3 = &ch2[0];
    return ch3;
}

我在上面调用函数它给出了我想要的东西,但仍然存在一些问题,我不知道它有什么问题

char *ch2=char_to_chars(ch);

但是当我写cout<<ch2;时,它会打印地址

当我写cout<<*ch2;时,它会打印已转换的字符

当我写cout<<ch2时,我想做的就是打印已经转换的字符

我需要在我的功能或其他地方更改

更新

我正在使用此代码进行连接。

char*lval = "bhavik";
char* concat(const char *nval) {
    int len = strlen(lval) + strlen(nval) + 1;
    char *temp = lval;
    lval = (char*) malloc(len * sizeof (char));
    strcpy(lval, temp);
    strcat(lval, nval);
    return lval;
}

这样好吗?

3 个答案:

答案 0 :(得分:3)

在对OP的评论中进行讨论后,您似乎在询问错误的问题。根据我的理解,您希望在现有char的末尾连接char*。如果char*指向以null结尾的字符串(通常称为C字符串),那么您只需将char复制到现有C字符串的末尾并移动NULL }}添加到char之后的位置。确保你实际上已经为char*分配了足够的内存,以便你可以这样做。

答案 1 :(得分:2)

当您运行cout<<ch2;时,您没有输出它指向的值,而是在内存中输出该值的地址。通过运行cout << *ch2;

,您无法在不取消引用指针的情况下打印出指向的值

我想与您分享一些提示。首先,我强烈建议您为变量提供比ch1ch2ch3等更好的名称。这只是草率而且根本无法扩展。其次,你的功能会做很多不必要的动作。试着这样做:

char* char_to_chars(char ch) {
char* convertedChar = new char;
*convertedChar = ch;
return convertedChar;
}

这会创建一个新指针并在堆上分配空间来存储值。这是将char转换为指针的更清晰有效的方法。但是,您也可以在没有功能的情况下执行此操作:

char* somePointer = &yourCharToConvert;

但是长话短说,如果你只是输入cout<<ch2;来尝试输出存储在指针中的值,那就不会有用了

答案 2 :(得分:0)

问题是你初始化堆栈中的ch2数组(作为局部变量)。当函数返回时,清除堆栈帧,“删除”你的数组(实际上堆栈帧被清除,并在其他函数调用和局部变量中使用,被其他值覆盖,所以你返回的指针将指向垃圾)。你需要在堆中malloc数组。

这种方式使用堆:

char* char_to_chars(char ch) {
    char *ch2 = malloc(10 * sizeof(char));
    ch2[0] = ch;
    return ch2;
}

如果要连接两个char*,可以使用内置的strcatstrncat函数。请注意,您已分配足够的内存。