我有一个不能修改的函数,它返回一个char*。
是否可以调用此函数并将返回值作为常量char*存储在结构中?
我希望能够做到以下几点:

char * function(void);

struct myStruct
{
    const char *myVal;
};

int main(int argc, char *argv[])
{
    char *value = function();
    struct myStruct *s = malloc(sizeof(struct myStruct));
    s->myVal = value;  // I want to be able to assign the value and
                       // immediately free value as per the next line.
    free(value);

    // now do some other stuff with myStruct

    // eventually free s
    free(s)

    return 0;
}

我希望能够将“value”赋给s->myVal,然后立即释放value,而不会丢失s->myVal中存储的内容,就好像s->myVal包含一个字符串文本一样。
这可能吗?

最佳答案

OP想要的是不用在myStruct中释放字符串。他对字符串的最大长度也有上限。
所以另一个解决方案是将myVal作为myStruct中的数组。
所以myStruct的定义是

struct myStruct
{
    char myVal[MAX_LENGTH];
};

副本必须使用
s->myVal[0]='\0';
strncat(s->myVal,value,MAX_LENGTH);
(@chux已经解释过在空字符串上strncat是复制字符串的最有效方法)
然后您可以释放value并且不必在s中释放字符串,只要s完成。
free(value);

其他错误
struct myStruct s ---> struct myStruct *s

关于c - 如何将char *复制到const char *?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43454121/

10-11 21:23