#c #strcat
#c #strcat
Вопрос:
#include <stdio.h>
#include <stdlib.h>
char wordsum(char FW[256],char SW[256]){
int i;
int j=strlen(FW);
for (i=0;i<=strlen(SW);i )
FW[i j 1]=SW[i];
printf("%c",FW);
return FW;
}
int main()
{
char F[256];
char S[256];
printf("Enter the first wordn");
gets(F);
printf("Enter the Second wordn");
gets(S);
wordsum(F,S);
return 0;
}
Я не знаю, что не так с моим кодом для создания strcat
функции. Я надеюсь найти ответ.
Комментарии:
1. Попробуйте
FW[i j]=SW[i]
. (В текущем кодеSW
копируется сразу после завершения0
FW
.)2. … и напишите нулевой ограничитель строки
''
.3.
printf("%s",FW);
4.
char wordsum(...)
—>char *wordsum(...)
5. @WeatherVane Я предполагаю, что это происходит уже из-за
<=
.
Ответ №1:
Я предполагаю, что код написан, чтобы узнать больше о языке C. Если да, могу ли я представить альтернативную реализацию, которая не использует strlen(). Цель состоит в том, чтобы представить некоторые из действительно приятных функций в языке. Возможно, в первый раз будет немного сложно обвести вокруг пальца, но код IIRC можно найти в книге K amp; R «Язык программирования C».
Поехали:
char* mystrcat(char *dest, const char *src)
{
char *ret = dest;
while (*dest)
dest ;
while ((*dest = *src ))
;
return ret;
}
Первый цикл while находит конец строки назначения. Второй цикл while добавляет исходную строку к строке назначения. Наконец, мы возвращаем указатель на исходный буфер dest.
Функция могла бы быть еще лучше, если бы она не возвращала указатель.
void mystrcat(char *dest, const char *src)
{
while (*dest)
dest ;
while ((*dest = *src ))
;
}
HTH
Ответ №2:
В вашем коде есть несколько ошибок. Они:
1) Функция не может вернуть массив на C, и вам не нужно этого делать. Измените возвращаемый тип с char
на void
of wordsum
и сотрите строку return FW;
2) Вы хотите напечатать строку, верно? Спецификатор формата для строки — %s
. Поэтому напишите printf("%s",FW);
вместо printf("%c",FW);
.
3) Сделайте это: FW[i j]=SW[i];
. Почему вы добавили дополнительный 1 к i j
? Просто подумайте логически.
4) Добавьте файл заголовка для strlen()
, это <string.h>
.
5) Сотрите эти звездочки до и после FW[i j]=SW[i];
.
Ответ №3:
В вашей функции есть несколько проблем, я изменил и прокомментировал их ниже:
char *wordsum(char FW[256],char SW[256]){ // correct function type
int i;
int j=strlen(FW);
for (i = 0; i <= strlen(SW); i )
FW[i j] = SW[i]; //change 'i j 1' to 'i j'
printf("%s",FW); //change format specifier as you are printing string not character
return FW;
}
Тогда dot забудьте захватить возвращаемый указатель, используя char*
переменную в вызывающей функции (здесь main()
)
char *resu<
result = wordsum(F,S);
printf("n%sn", result);
Рабочий пример:https://ideone.com/ERlFPE