相当于" size_t"在C?

时间:2015-04-30 14:51:24

标签: c arrays memory

假设我想创建一个像

这样的函数
int indexOf ( char * str, char c )
{
   // returns the index of the chracter c in the string str 
   // returns -1 if c is not a character of str
  int k = 0;  
  while (*str)
  { 
      if (*str == c) break;
      else ++str;
  }
  return *str ? k : -1;  
}

但我想让它尽可能可靠。例如,上述仅在保证最大int大于或等于字符数组的最大大小时才有效。我如何用纯C覆盖我的所有碱基?

3 个答案:

答案 0 :(得分:9)

size_t

不,认真。 size_t是标准的C类型。它在<stddef.h>中定义。

(这是的答案“C中”size_t“的等价物是什么?”

对于你写的确切函数,strchr会更合适 - 调用者可以像这样使用它:

const char* str = "Find me!find mE";
char* pos = strchr(str, '!');
if(pos) // found the char
{
    size_t index = (pos - str); // get the index
    // do the other things
}
else
{
    // char not found
}

所以,一般来说,如果你想在用户提供的数组中找到一些东西,那么返回一个指针在C中是最惯用的。

可以返回ssize_t(其中包含size_t-1的所有可能值),但它不是标准C,所以我不知道推荐它。我只是提到完整性。

答案 1 :(得分:4)

使用指针。

您将始终能够返回指向数组中有效元素的指针。通过返回NULL来发信号通知未找到的条件。

答案 2 :(得分:0)

将您的问题解释为:

How to not rely in index size for pointer arithmetic?

答案是:

int indexOf ( char * str, char c )
{
    // returns the index of the chracter c in the string str 
    // returns -1 if c is not a character of str
    char *aux = str;  
    while (*aux != c )
    { 
        if (*aux == '\0')
            return -1;
        aux++;
    }
    return aux - str; 
}