【发布时间】:2017-11-08 20:41:13
【问题描述】:
我对 C 语言还很陌生,对于在函数中初始化作为指针的结构变量的正确方法有点困惑。这种风格是否足够,还是我需要在分配 s->str 之前分配内存? 感谢您的回复,如果问题不清楚,我们深表歉意,因为我对这种语言非常陌生。
typedef struct Mystruct{
const char* str1;
const char* str2;
}mystruct;
mystruct* mystruct_new(const char* str1, const char* str2){
mystruct *s = (mystruct*)(malloc(sizeof(mystruct)));
s->str1 = str1;
s->str2 = str2;
return s;
}
【问题讨论】:
-
如果您想要分配给
strdup(str1)的字符串副本。我们需要看看如何调用这个函数来发出建议。使用字符串文字,您的代码就可以了。 -
查看this question了解更多关于在c中转换malloc结果的信息
-
这取决于您的意图。您想要这些字符串的副本还是只想指向已经存在的字符串?
-
@Unlikely1879 s->str1 不会指向
mystruct_new(...)末尾的垃圾。相反,它将指向与您传入的完全相同的字符串。因此,如果您调用mystruct_new(inputStr1, inputStr2);,然后更改 inputStr1,例如inputStr1[0] = 'b',它也会改变你的 mystruct 的 str1。 -
str1不是函数本地的,所以它不会在函数结束时被销毁,但它的作用域是未知的。例如,如果它的作用域在main中,它将持续到程序结束。但取决于它到底是什么,也许它会被改变,并且这种改变会影响你的结构,因为s->str1将指向它而不是拥有它自己的副本。