Как сделать строку из 3 строк ввода пользователя в c - PullRequest
0 голосов
/ 13 декабря 2018

скажем, у меня есть 3 строки:

    char a[9];
    char b[20];
    char c[20];

как мне создать третью строку, составленную из содержимого предыдущих строк, учитывая, что a, b и c вводятся пользователем.когда я использую strcpy с a и затем strcat с b и c, а затем печатаю полученную строку d, я получаю мусорные символы.Это связано с NULL-терминаторами для каждой строки или я делаю что-то еще неправильно?Спасибо

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

    void getBasicDetails(char date_of_birth[9], char first_name[20], 
    char last_name[20])
    {
        char temp_dob[9];
        char temp_fname[20];
        char temp_lname[20];
        char file_name[50];
        int stop = 1;
        printf("Patient's Date of Birth (in format dd/mm/yy) : "); // 2 and 5
        while (stop == 1)
        {
            scanf("%s", &temp_dob);
            emptyBuffer();
            if ((temp_dob[2] == '/' && temp_dob[5] == '/'))
            {
                stop = 0;
                break;  
            }
            else
            {
            printf("Enter in format dd/mm/yy\n");
            }
        }
      date_of_birth = temp_dob;
      date_of_birth[9] = '\0';

      printf("Patient's First Name : ");
      scanf("%s", &temp_fname);
      emptyBuffer();
      first_name = temp_fname;
      first_name[20] = '\0';

      printf("Patient's Last Name : ");
      scanf("%s", &temp_lname);
      emptyBuffer();
      last_name = temp_lname;
      last_name[20] = '\0';

      strcat(file_name, first_name);
      strcat(file_name, last_name);
      strcat(file_name, date_of_birth);
      puts(file_name);
  }

Ответы [ 3 ]

0 голосов
/ 13 декабря 2018

Я не уверен, но если вы хотите создать третью строку, состоящую из содержимого предыдущих строк, попробуйте следующее:

   char str1[100];
   char str2[100];
   char str3[100];
   printf("Enter String1: \n");
   gets(str1);
   printf("\Enter String2:\n");
   gets(str2);
   strcpy(str3,str1);
   strcat(str3,str2);
   printf("String 3: %s", str3);
0 голосов
/ 14 декабря 2018

относительно следующих (и аналогичных) строк в опубликованном коде:

  scanf("%s", &temp_fname);
  ....
  first_name = temp_fname;
  1. temp_fname - это массив, в C голая ссылка на массив ухудшается до адресапервый байт массива.добавление & к параметру в вызове к scanf() недопустимо при установке массива.
  2. при использовании спецификаторов формата ввода: %s и / или %[...] всегда включают MAX CHARACTERSмодификатор, который на 1 меньше длины входного буфера.Это связано с тем, что эти два входных спецификатора всегда добавляют байт NUL ко входу
  3. . При попытке скопировать строку простое назначение не будет работать.Все, что произойдет, это то, что адрес источника будет скопирован в место назначения (и, вероятно, приведет к тому, что компилятор выведет сообщение об ошибке) Вместо использования назначения: strcpy() или strncpy()

При компиляции всегда включайте предупреждения, а затем исправляйте эти предупреждения.Для gcc при минимальном использовании: -Wall -Wextra -Wconversion -pedantic -std=gnu11) Примечание: другие компиляторы используют разные опции для создания одной и той же вещи

0 голосов
/ 13 декабря 2018

Если вы не возражаете, не могли бы вы опубликовать свой полный код?Сейчас я предполагаю, что a, b и c содержат некоторую строку, а d пусто.

char a[9];
char b[20];
char c[20];
char d[60];

strcpy (b);
strcpy (a);
strcpy (c);
strcpy (d);
strcat (d, a);
strcat (d, b);
strcat (d, c);
puts(d);
printf(d);

Кроме того, вы можете использовать функцию sprintf, чтобы сделать то же самое:

sprintf(d, "%s%s%s", a, b, c)

Если я делаю это правильно, это должно вернуть правильные результаты, которые вы хотели.Более подробную информацию о strcat () можно найти по этой ссылке: https://www.tutorialspoint.com/c_standard_library/c_function_strcat.htm

Более подробную информацию о функции sprintf () можно найти по этой ссылке: https://www.geeksforgeeks.org/sprintf-in-c/

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