是否有可能检查函数参数是char数组,const字符串,指向malloc数据的字符串指针

时间:2011-08-04 03:19:33

标签: c

我的函数参数检查有问题。 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);
}

2 个答案:

答案 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);

}