我可以使用以下功能将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;
}
这样好吗?
答案 0 :(得分:3)
在对OP的评论中进行讨论后,您似乎在询问错误的问题。根据我的理解,您希望在现有char
的末尾连接char*
。如果char*
指向以null结尾的字符串(通常称为C字符串),那么您只需将char
复制到现有C字符串的末尾并移动NULL
}}添加到char
之后的位置。确保你实际上已经为char*
分配了足够的内存,以便你可以这样做。
答案 1 :(得分:2)
当您运行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;
来尝试输出存储在指针中的值,那就不会有用了
答案 2 :(得分:0)
问题是你初始化堆栈中的ch2
数组(作为局部变量)。当函数返回时,清除堆栈帧,“删除”你的数组(实际上堆栈帧被清除,并在其他函数调用和局部变量中使用,被其他值覆盖,所以你返回的指针将指向垃圾)。你需要在堆中malloc数组。
这种方式使用堆:
char* char_to_chars(char ch) {
char *ch2 = malloc(10 * sizeof(char));
ch2[0] = ch;
return ch2;
}
如果要连接两个char*
,可以使用内置的strcat
和strncat
函数。请注意,您已分配足够的内存。