Удаление последнего символа в массиве char * myargs - PullRequest
1 голос
/ 14 марта 2019

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

В настоящее время "строка" хранится в myargs[1] где myargs был определен как char *myargs[2].Для этого примера предположим, что строка выглядит следующим образом: «Привет, как дела» (включая завершающий пробел).Я хотел бы лишить "строку" своего заднего пространства.Я понимаю, что массивы char - это строки в C и что массив char должен заканчиваться символом '\0'.Тем не менее, я не уверен, как добиться этого в такой ситуации.

РЕДАКТИРОВАТЬ:

Чтобы дать немного больше контекста: я пытаюсь объединить строки, считанные из командной строки водна строка хранится по адресу в myargs [1].Между каждой из строк я добавляю пробел, и это делается в цикле while, пока не будет выполнено условие завершения.Однако, поскольку один пробел добавляется до завершения цикла, мне нужно удалить этот последний пробел.Краткие фрагменты соответствующего кода:

char *myargs[2];
while (parameterIndex != argc && strcmp(argv[parameterIndex], "+") != 0) {
    printf("%d", parameterIndex);
    printf("\n");
    strcat(myargs[1], argv[parameterIndex]);
    strcat(myargs[1], " ");
    parameterIndex = parameterIndex + 1;
}

Объединенные аргументы в myargs [1] будут использоваться в библиотечной функции execve для выполнения команды, которая в настоящее время хранится в myargs [0].

1 Ответ

0 голосов
/ 14 марта 2019

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

for (int i=strlen(my_string)-1; i >= 0; i--) {
  if (my_string[i] != ' ') {
    my_string[i+1] = '\0';
    break;
  }
}

Обратите внимание, что этот код удалит все символы в конце пробела. Если вы гарантированно имеете ровно 1 символ пробела, это еще проще:

  int length = strlen(my_string);
  my_string[length-1] = '\0';
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...