我有一个不能修改的函数,它返回一个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/