Конкатенация строк не работает в C (TDM-GCC-64)

#c #gcc

#c #gcc

Вопрос:

Это мой код

 #include <stdio.h>
#include <conio.h>
#include <string.h>
int main()
{
  char fn[20], ln[20], fulln[20];
  int i, j, k;
  printf("Enter your first name: ");
  scanf("%s",fn);
  printf("Enter your last name: ");
  scanf("%s",ln);
  for(i=0,k=0;fn[i]!=''; i  , k  )
  {
    fulln[k] = fn[i];
  }
  k  ;
  for(j=0;ln[j]!='';j  ,k  )
  {
    fulln[k] = ln[j];
  }
  fulln[k] = '';
  printf("Your full name is %s",fulln);
  return 0;
}
  

Не могу понять, что с этим не так. В нем не отображается полное имя. Я использую TDM-GCC-64 (последнюю версию)

Комментарии:

1. Простая математика: 20 20 ! = 40.

2. Также прочитайте о strcat() . У адресата должно быть достаточно памяти для хранения объединенного результата плюс нулевой ограничитель.

Ответ №1:

Ваш код в основном выполняет strcpy и strcat вручную.

   for(i=0,k=0;fn[i]!=''; i  , k  )
  {
    fulln[k] = fn[i];
  }
  k  ;
  for(j=0;ln[j]!='';j  ,k  )
  {
    fulln[k] = ln[j];
  }
  fulln[k] = '';
  

Были проблемы с вашим кодом:

  • Вы должны инициализировать весь буфер символов, вот так: char fn[20] = "", ln[20] = "", fulln[41] = "";

  • Кроме того, вы должны убедиться, что fulln достаточно большой, чтобы содержать оба fn и ln . В качестве примера, сделайте его 41, как указано выше, чтобы разместить пробел между ними.

  • Кроме того, эта строка k ; должна быть изменена fulln[k ] = ' '; — это добавляет пробел между ними.

Кстати, поскольку вы уже включили string.h , нет причин, по которым вам не следует использовать стандартную библиотеку strcpy и strcat . Это означает, что эти две строки могут заменить весь ваш раздел кода:

 strcpy(fulln, fn);
strcat(fulln, " ");
strcat(fulln, ln);
  

Комментарии:

1. @SteveWhoLikesLinux больше нет кода для написания. Все, что вам нужно, это заменить ваш 2 for цикл на вышеуказанные 3 строки, используя strcpy и strcat.