我有一个简单的问题,如果我有一个像这样的字符串数组:
char *array[3] = {"hello","hi","goodbye"};
如何获取数组中每个元素的大小?我正在尝试做一个qsort功能,但qsorts'第三个参数需要数组中每个元素的大小(以字节为单位)。谢谢
答案 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 );