char to char* issues
char to char* issues
我可以使用以下函数将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;
取消引用指针的情况下,您不可能打印出所指向的值
还有一些小技巧我想和大家分享。首先,我强烈建议您为变量命名比ch1
、ch2
、ch3
等更好的名称。这太草率了,根本无法扩展。其次,你的功能会做很多不必要的动作。试着这样做:
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*
,可以使用内置的strcat
和strncat
函数。只要注意你有足够的内存分配。