char to char* issues

char to char* issues

本文关键字:char issues to      更新时间:2023-10-16

我可以使用以下函数将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;
}

这个好吗?

在对OP的评论中讨论后,您似乎问错了问题。据我所知,您希望将char连接到现有char*的末尾。如果char*指向一个以null结尾的字符串(通常称为C字符串),则只需将char复制到现有C字符串的末尾,并将NULL字符移动到添加的char之后的位置。确保您实际上已经为char*分配了足够的内存,这样您就可以轻松地执行此操作。

当您运行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;来输出存储在指针中的值,那么

是不起作用的

问题是初始化堆栈中的ch2数组(作为局部变量)。当函数返回时,堆栈帧被清除,从而"删除"您的数组(实际上,堆栈帧已被清除,并用于其他函数调用和局部变量,会被其他值覆盖,因此您返回的指针将指向垃圾)。您需要对堆中的数组进行malloc。

这种方式使用堆:

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

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