C - 计数元素(边界检查) - 数组

标签 c arrays string pointers

有什么方法可以计算字符串指针数组中的元素吗?其中的元素指的是其中的每个单词或短语,这里是一个包含 3 的数组的示例元素(本例中的每个短语)

char *s[] = {
    "To err is human...",
    "But to really mess things up...",
    "One needs to know C!!",
};

所以这里数组有3个位置(即3个元素),每个位置都指向一个内存地址,该地址是字符串的开头,但仍然很难确定数组是否到达末尾,所以我添加了第四个元素'\0',所以最后会有2个空字符,然后实现这个函数。

int cantidadElementos(char *arr){

  int count=0;
  while(*arr!='\0'){
      while(*arr!='\0'){
          arr++;
      }
      arr++;
      if(*arr!='\0'){
          count++;
      }
  }
return count;
}

我尝试做的是边界检查,所以我发现如果我使用数组中每个指针的地址,我就可以看到字符串的地址,然后查看最后一个值是否为“\0” (检查字符串是否到达末尾),但是这是不可能的,因为数组的下一个内存地址可能包含垃圾值,所以我想出了在数组末尾添加另一个空字符,然后检查是否有一个双“\0”。

我只是觉得这个解决方案很糟糕(有效,但仍然很糟糕)。 这可能适合文本处理器,因为它只多了 2 个字节的内存,我将用它来确定文本是否已到达末尾。

那么回到我的问题,有什么方法可以计算字符串指针数组中的元素吗?我已经进行了很多搜索,但无法想出更好的解决方案。

最佳答案

测试一下:

const char *s[] = {"To err is human...",    "But to really mess things up...",  "One needs to know C!!"};
printf("%d\n",sizeof(s)/sizeof(*s));

关于C - 计数元素(边界检查) - 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52481172/

相关文章:

c - 使用递归的成对差异

Python:将初始 numpy 数组分配给另一个变量,更改新变量的几个元素会更改初始 numpy 数组

C++:C 字符串集

java - 自动将测量格式化为 Java 中的工程单位

c - xmlNode 路径组件

c++ - 以下程序的格式说明符可能是什么?

c - 在函数中传递结构体

java - 按字母顺序排列字符串中的字符,然后将按字母顺序排列的字符放入新字符串中?

c++ - 在 C++ 中使用获取行

c - 请评论这是否适用于进程和线程之间的通信