-4

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

这个好吗 ?

4

3 回答 3

3

After discussion in the comments to the OP, it seems that you are asking about the wrong problem. From what I understand, you want to concat the char on the end of an existing char*. If the char* points to a null-terminated string (commonly called a C-string), then you should simply copy the char to the end of the existing C-string and move the NULL character to the location just after the added char. Be sure that you actually have allocated enough memory to the char* so that you can leagally do this.

于 2013-07-03T18:44:37.110 回答
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;行不通的

于 2013-07-03T19:02:50.377 回答
0

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

这种方式使用堆:

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

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

于 2013-07-03T18:39:22.130 回答