Что не так с моей кодовой функцией для создания функции strcat на C?

#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