【问题标题】:How to get size of each element in array of char arrays如何获取char数组中每个元素的大小
【发布时间】:2015-07-14 21:09:07
【问题描述】:

我有一个简单的问题,如果我有一个这样的字符串数组:

char *array[3] = {"hello","hi","goodbye"};

如何获取数组中每个元素的大小?我正在尝试执行 qsort 函数,但 qsorts 的第三个参数需要数组中每个元素的字节大小。谢谢

【问题讨论】:

  • 标题具有误导性。

标签: c pointers sizeof qsort


【解决方案1】:

如果您使用 qsort,则不需要字符串的大小(即长度)。您需要数组元素的大小。那就是sizeof(char *)

【讨论】:

    【解决方案2】:

    您要查找的大小是sizeof(char *),因为您的数组成员只是指向字符数组的指针。

    edit: ...这已经是重复的了

    【讨论】:

      【解决方案3】:

      这个数组

      char *array[3] = {"hello","hi","goodbye"}; 
      

      是一个指针数组,它的元素类型为char *,大小为sizeof( char * )

      程序可以如下所示

      #include <stdio.h>
      #include <stdlib.h>
      #include <string.h>
      
      int cmp( const void *lhs, const void *rhs )
      {
          const char **a = ( const char ** )lhs;
          const char **b = ( const char ** )rhs;
      
          return strcmp( *a, *b );
      }
      
      int main( void )
      {
          char *array[3] = { "hello", "hi", "goodbye" };
          const size_t N = sizeof( array ) / sizeof( *array );
      
          for ( size_t i = 0; i < N; i++ ) puts( array[i] );
          printf( "\n" );
      
          qsort( array, N, sizeof( char * ), cmp );
      
          for ( size_t i = 0; i < N; i++ ) puts( array[i] );
          printf( "\n" );
      }    
      

      程序输出是

      hello
      hi
      goodbye
      
      goodbye
      hello
      hi
      

      如果您喜欢指针或星号,那么您甚至可以使用以下方式编写 qsort 的调用 :)

          qsort( array, N, sizeof( char * ), *****cmp );
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-11-30
        • 2012-03-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-09-08
        • 2020-07-19
        相关资源
        最近更新 更多