2010-02-12 3 views
1

я получил следующую задачу:Как определить общую длину символа элементов массива указателей на символы?

У меня есть массив символьных указателей

char *opts[] = { "-a", "--append", "-b" }; 

и имя команды, хранящееся в

char cmd[] = "ls"; 

Теперь нужно вычислить все возможные комбинации, которые я сделанный с использованием Научной библиотеки GNU и выполнение команды с помощью комбинаций вычислений.

Проблема у меня есть, как вычислить объем памяти, который мне нужен для получения char *, который передается системе().

Вот моя первая попытка:

int length = strlen(cmd) * sizeof(char); 

for (int i = 0; i < 3; ++i) { 
    length += strlen(opts[i]) * sizeof(char); 
} 

Ну, это сработало, но я чувствую, что это не самое лучшее решение прямо /. Не могу ли я применить двумерный массив к плоскому одномерному массиву и получить его размер (если я не ошибаюсь, это не многомерные массивы на C, C имитируют ими).

+0

, так как все это, в конце концов, отображенных на одномерные пространство памяти, ни один язык не имеет многомерных массивов ... – fortran

ответ

2

я не могу бросить двумерный-массив плоского одномерного массива

Технически не так, но здесь неуместен, так как вы не имеете два -мерный массив. У вас есть 1-мерный массив значений, которые имеют длину. Нет никакой гарантии, что эти строки находятся в смежной памяти, поэтому невозможно было бы измерить их общую сиззу за один шаг.

Способ иметь это единственный способ получить необходимую вам оценку.

P.S. Обратите внимание, что sizeof(char) гарантируется равный 1.

PPS Хотя я уже уцененный ответ tommie75, мы можем поместить часть его использовать:

int numelem = sizeof(opts)/sizeof(opts[0]); 
for (int i = 0; i < numelum; ++i) 
{ 
    length += strlen(opts[i]) * sizeof(char); 
} 
+0

James: Спасибо! :) См. Мой отредактированный ответ, который указал на вводящий в заблуждение заголовок вопроса ... – t0mm13b

+0

Btw, я бы не стал гарантировать, что sizeof (char) равен 1 либо - это импликация, определенная как результат, на некоторых системах она может be 2 ... http: //stackoverflow.com/questions/2252033/in-c-why-is-sizeofchar-1-when-a-is-an-int – t0mm13b

+1

@ tommieb75: Стандарт C говорит: ' Когда [sizeof] применяется к операнду с типом char, unsigned char или подписанным символом (или его соответствующей версией), результат равен 1.' Так что размерof ((un)? Подписан)? char * * гарантированно 1, в стандарте C. –