【发布时间】:2015-07-14 21:09:07
【问题描述】:
我有一个简单的问题,如果我有一个这样的字符串数组:
char *array[3] = {"hello","hi","goodbye"};
如何获取数组中每个元素的大小?我正在尝试执行 qsort 函数,但 qsorts 的第三个参数需要数组中每个元素的字节大小。谢谢
【问题讨论】:
-
标题具有误导性。
我有一个简单的问题,如果我有一个这样的字符串数组:
char *array[3] = {"hello","hi","goodbye"};
如何获取数组中每个元素的大小?我正在尝试执行 qsort 函数,但 qsorts 的第三个参数需要数组中每个元素的字节大小。谢谢
【问题讨论】:
如果您使用 qsort,则不需要字符串的大小(即长度)。您需要数组元素的大小。那就是sizeof(char *)。
【讨论】:
您要查找的大小是sizeof(char *),因为您的数组成员只是指向字符数组的指针。
edit: ...这已经是重复的了
【讨论】:
这个数组
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 );
【讨论】: