我的代码函数在C中制作strcat函数有什么问题?

时间:2016-10-23 18:02:31

标签: 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 word\n");
   gets(F);
   printf("Enter the Second word\n");
   gets(S);
   wordsum(F,S);
   return 0;
}

我不知道我的代码有什么问题需要strcat功能。我希望找到答案。

3 个答案:

答案 0 :(得分:2)

我假设编写代码是为了更多地了解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

答案 1 :(得分:1)

您的功能存在一些问题,我已在下面进行了更改和评论:

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;
}

然后点忘记使用调用函数中的char*变量捕获返回的指针(此处为main()

char *result;
result = wordsum(F,S);
printf("\n%s\n", result);

工作示例:https://ideone.com/ERlFPE

答案 2 :(得分:1)

您的代码中存在多个错误。他们是:

1)函数不能在C中返回数组,您不需要这样做。将返回类型从char更改为void的{​​{1}}并删除行wordsum

2)你想打印一个字符串,对吗?字符串的格式说明符为return FW;。所以请写%s而不是printf("%s",FW);

3)这样做:printf("%c",FW);。为什么要在FW[i+j]=SW[i];添加1?只是逻辑思考。

4)为i+j添加标题文件,它是strlen()

5)删除<string.h>之前和之后的星号标记。