#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.