Массив строк без использования strcpy в C? - PullRequest
0 голосов
/ 05 апреля 2020

В данный момент я работаю над проектом, в котором используется множество массивов, но я не уверен, что смогу использовать библиотечные функции <string.h>: мне нужно сохранить несколько названий продуктов в массиве строк, в котором находится индекс это идентификатор продукта. Мне не нравится strcpy(), потому что я не уверен, смогу ли я использовать библиотеку <string.h>, и даже если бы я мог, не немного ли раздражает печать имени в printf()? Я все еще рассматриваю этот вариант, но я не знаком с ним, может быть, поможет какое-то понимание.

char arg_description[63];
char *description[10000];
int product_id = 0;

int main() {
    while (1) {
        scanf("%s", arg_description);
        description[product_id] = arg_description;
        product_id++;
    }
    return 0;
}

Это была бы копия кода, который меня беспокоил. Это не точный код, так как проект намного больше, но он представляет проблему довольно хорошо. Сначала это будет работать, так как description[0] будет показывать название продукта, то есть если это будет только один продукт. Он переопределяет предыдущую переменную и даже дублирует ее. Если третьим добавленным продуктом будет хлеб, он изменит название всех других описаний на хлеб. И я даже не объясняю, как это странно для меня. Мои квалификации не самые лучшие, я уверен, что мне не хватает навыков, но я здесь, чтобы учиться.

1 Ответ

1 голос
/ 05 апреля 2020

Вы можете сделать что-то вроде этого

#include <stdio.h>

char arg_description[63];
char description[10000][63];
int product_id = 0;
int i;

int main() {
  while (1) {
    scanf("%62s", arg_description); // limiting the input to 62 char to avoid overflow

    for (i = 0; arg_description[i] != '\0', i++)
      description[product_id][i] = arg_description[i];

    description[product_id][i] = '\0';

    product_id++;
  }
  return 0;
}

И если бы вы выбрали strcpy, вы могли бы сделать это

#include <stdio.h>
#include <string.h>

char arg_description[63];
char description[10000][63];
int product_id = 0;

int main() {
  while (1) {
    scanf("%62s", arg_description);
    strcpy(description[product_id], arg_description);
    product_id++;
  }
  return 0;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...