я столкнулся с проблемой, проверяя code.I определить макрос для получения количества элементов массива следующим образом:Как подсчитать количество элементов массива
#define ARRAY_SIZE(arr) sizeof(arr)/sizeof(arr[0])
Этот макрос штраф для подсчета количества элементов массива, инициализаторы соответствует емкости (например, int buf[] = {1,2,3};
), но не очень эффективно с массивами объявленных как: int buf[20] = {1,2,3};
Теперь я знаю подсчета элементов массива, как это довольно легко, но как насчет большое количество элементов? Как вы их считаете? подсчет может быть убийцей, вы знаете!
Рассмотрим следующий код:
#include <stdio.h>
#include <string.h>
#define ARRAY_SIZE(arr) sizeof(arr)/sizeof(arr[0])
void g_strcat(void *_Dst, size_t dstSize, size_t bytes, const void *_Src, size_t srcSize);
int main(void)
{
int dst[20] = { 1,2,3 };
int src[] = { 4,5,6 };
size_t dstSize = 3; // dstSize = ARRAY_SIZE(dst) doesn't work
size_t srcSize = ARRAY_SIZE(src);
g_strcat(dst, dstSize, sizeof(int), src, srcSize);
size_t n, newSize = dstSize + srcSize;
for (n = 0; n < newSize; n++) {
printf("%d ", dst[n]);
}
putchar('\n');
return 0;
}
void g_strcat(void *_Dst, size_t dstSize, size_t bytes, const void *_Src, size_t srcSize)
{
memcpy((char *)_Dst + (dstSize * bytes), _Src, srcSize * bytes);
}
Вы хотите рассчитать размер списка инициализаторов вместо размера массива? – user3528438
Да, вот что я имел в виду –
Итак, сколько элементов вы ожидаете 'buf [20] = {1,2,3};' иметь? 3 или 20? – Soren