类似的C字符串有不同的大小

时间:2017-06-07 21:41:48

标签: c string pointers types sizeof

我有一个函数,它将const unsigned char *类型的参数作为其输入之一。

功能(如下所述)

someType *doSomething (someStruct *, const unsigned char *);judyData *getFromJudy (judyConfig *, const unsigned char *)

我还有一个字符串数组char* i[10]

假设i[2] = "foo"。现在,当我运行

时,我得到了不同的结果

doSomething(struct_instance, i[2])doSomething(struct_instance, "foo")

任何人都可以帮我解决这种情况何时出现? 有没有办法对此指针指向的值进行类型转换,使其行为类似于普通的字符串文字?

编辑:

分享代码示例。

功能:

// get an entry from the index, return it or null
judyData *getFromJudy (judyConfig *cnf, const unsigned char *key) {
  judyData *data;
  JudySlot *cell;
  int current;
      cell = judy_slot((Judy *) cnf->idx, (unsigned char *) key, (size_t) strlen((const char *) key));

  if (cell) {
    data = (judyData *) *cell;
    // doesn't enter this if "foo" is not used and i[2] is used.
    if (data->count == 0) {
      return NULL;
    }

    return data;
  }
  return NULL;
}

char * i[10]。它被称为

data = getFromJudy (obj, "foo")

1 个答案:

答案 0 :(得分:3)

let integer = false ? 1 : 0 print(integer) // prints 0 返回机器上指针的大小,即八个字节,因为它的类型为sizeof(i[2]); char *返回字符串“foo”的长度加上空终止符,即4个字节。