如何获取char数组数组中每个元素的大小

时间:2015-07-14 21:09:07

标签: c pointers sizeof qsort

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

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

如何获取数组中每个元素的大小?我正在尝试做一个qsort功能,但qsorts'第三个参数需要数组中每个元素的大小(以字节为单位)。谢谢

2 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:1)

此数组

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