Как определить общую длину символов элементов массива указателей на символы? - PullRequest
1 голос
/ 12 февраля 2010

У меня возникла следующая проблема:

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

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

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

char cmd[] = "ls";

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

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

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

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

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

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

1 Ответ

2 голосов
/ 12 февраля 2010

Разве я не могу привести двумерный массив к плоскому одномерному массиву

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

Способ получить его - единственный способ получить желаемое значение.

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

P.P.S Хотя я уже урезал ответ tommie75, мы можем использовать его часть:

int numelem = sizeof(opts) / sizeof(opts[0]);
for (int i = 0; i < numelum; ++i) 
{ 
    length += strlen(opts[i]) * sizeof(char); 
} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...