проблема конкатенации массива - PullRequest
1 голос
/ 06 января 2011

Я пытаюсь объединить массив с массивом из argv (я забыл формальное имя для этого, входной массив? Массив параметров?)

В любом случае, я инициализирую исходный массив, затем использую memcpy для копирования двух массивов в новый массив.

int main(int argc, char *argv[]) {
  char *args1[] = {"foo","bar"};
  char **args = (char**) calloc(argc, sizeof(char*));
  memcpy(args, args1, sizeof(char*) * 2);
  memcpy(args + sizeof(char*) * 2, argv+1, sizeof(char*) * (argc-1));

но когда я запускаю это

  printf("%s %s %s\n", args[0], args[1], args[2]);

, а затем запустить

. / Тестовая база

Я получаю результат

foo bar (ноль)

Так что я пытаюсь выяснить, где облажался мой второй memcpy, но я не могу его найти. Любая помощь? Заранее спасибо.

1 Ответ

5 голосов
/ 06 января 2011

В этом коде есть две проблемы.

Задача # 1

calloc(argc, sizeof(char*))

должна быть

calloc(argc + 2, sizeof(char*))

Проблема# 2

Вы путаете арифметику указателей.Эта часть

args + sizeof(char*) * 2

должна быть просто

args + 2

В качестве альтернативы вы можете использовать

&args[2]

В любом случае, не умножайте смещение на размертип.Компилятор делает это автоматически.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...