我的函数参数检查有问题。 func(char * str)中有三种类型的字符串可以参数: const字符串 2.指向malloc数据的字符串指针 3. char数组。 可以限制c函数只接受const字符串,如“1111”?
我尝试编写如下代码,但它不起作用。
struct test{
const char *val;
};
void func(struct test *t, const char *rodata)
{
t->val = rodata;
}
但是我发现我无法检查我传递给func()的哪个rodata:
/* Test: rodata don't free after function call, it can be the point to*/
func(t, "333");
printf("%s\n", t->val);
/* Test: C function can't check rw char array, even with const ...*/
char rwdata[] = "22222";
func(t, rwdata);
memset(rwdata, '9', sizeof(rwdata));
printf("%s\n", t->val);
/* Test: C function can't check malloc ?*/
char *rwdata2 = strdup("rodata2");
free(rwdata);
func(t, rwdata2); /* cause error */
printf("%s\n", t->val);
}
答案 0 :(得分:5)
不 - 所有三个参数都是指针。没有办法可靠地区分它们。
答案 1 :(得分:0)
第3次错误
你可以这样做
typedef struct
{
const char* val;
}test;
test func(test t, const char* s)
{
t.val = s;
return t;
}
int main()
{
test t ={0};
char* p = NULL;
p= (char*)malloc(4);
strncpy(p, "abc", 4);
t = func(t, p);
}