【问题标题】:My strcat doesn't return a value?我的 strcat 没有返回值?
【发布时间】:2013-01-04 20:11:19
【问题描述】:

我编写了一个 strcat 函数。但是我的函数没有以这种方式运行 -----> char * mystrcat(char *s,char *t)。我想返回一个指针。你能帮帮我吗?

#include <stdio.h>

void mystrcat(char *s,char *t)
{
    while(*s!='\0')
        s++;
        s--;
    while((*(s+1)=*t)!='\0')
    {   s++;
        t++;
    }
}

int main()
{

    char str[30], str1[30];
   gets(str);
   gets(str1);
   mystrcat(str, str1);
    printf("%s\n",str);
    return 0;
}

【问题讨论】:

    标签: string function char strcat


    【解决方案1】:

    您的函数没有 return 值。如果你想从它返回一个指针,那么只需返回它。而且 void 也不正确

    【讨论】:

    • 当我写 return 而不是 void 时,它不会运行
    【解决方案2】:

    当您编写void mystrcat(char *s,char *t) 时,您是在使用 void 说“我不会有返回值”。如果你想返回一个指针,这个不能是void

    要返回指向您的字符串的指针,请使用char**

    您的字符串是一系列字符,表示为char*

    这是一个使用您的代码的示例。

    #include <stdio.h>
    
    char** mystrcat(char *s,char *t)
    {
        char *sOrig = s;
        while(*s!='\0'){
            s++;
        }
        s--;
    
        while( ( *(s+1) = *t) != '\0')
        {
            s++;
            t++;
        }
        return &sOrig;
    }
    
    int main()
    {
       char str[30], str1[30];
       gets(str);
       gets(str1);
       char** concatValuePointer = mystrcat(str, str1);
       printf("Pointer is %p\n",concatValuePointer);
       return 0;
    }
    

    【讨论】:

    • 问题和这种方法的基础是,您正在破坏您传入的原始指针位置。通过在递增它 (s++) 之前保留该值 (sOrig),您可以保持对原始指针的引用(即指针)。这回答了你的问题了吗?如果没有,请进一步描述您想要完成的任务。
    猜你喜欢
    • 1970-01-01
    • 2021-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-17
    相关资源
    最近更新 更多