Anonymous 发表于 2017-7-22 16:37:46

如何将函数的参数保存起来,并通过数组或指针的形式返回保存的数据

本帖最后由 匿名 于 2017-7-25 12:53 编辑


我写了个函数,功能是传入参数(字符串)并保存,然后通过返回值的形式把保存的数据(字符串)返回
结果只能返回一个字符,无法返回字符串,请高手帮忙看一下


#include "stdafx.h"
# include <stdio.h>
# include <tchar.h>
# include <windows.h>

extern "C"

int TemporaryVariables=0; 用来索引下标的临时变量
char TemporaryArray; //用来存放参数(字符串)的数组

char *InputOutput(char *Click, char *Keypress); //函数声明
char *InputOutput(char *Click, char *Keypress) //函数的定义
{
        if (Click!=NULL) //判断参数是否为空
        {
                TemporaryArray = *Click; //把参数传给数组
                TemporaryVariables++; //下标加一
        }

        if (Keypress!=NULL)
        {
                TemporaryArray = *Keypress; //把参数传给数组
                TemporaryVariables++; //下标加一
        }

        return *TemporaryArray; //返回保存的数据
}

int main()
{
        MessageBox(NULL, InputOutput("91", "55"), NULL, MB_OK); //通过消息框的形式输出返回值
        return 0;
}

shuofxz 发表于 2017-7-25 11:19:50

# include <stdio.h>
# include <windows.h>
# include <string.h>

int TemporaryVariables = 0;
char TemporaryArray;                        //这里为了防止溢出,定义的比较大

void InputOutput(char *Click, char *Keypress)
{
        if (Click != NULL)
        {
                strcpy(TemporaryArray, Click);
                TemporaryVariables++;
        }

        if (Keypress != NULL)
        {
                strcpy(TemporaryArray, Keypress);
                TemporaryVariables++;
        }

        //结束标志\0在这个程序中没用,TemporaryVariables就可以用来表示到哪里结束了
        //后面return删了,因为TemporaryArray是全局变量不需要返回
}

int main()
{
        InputOutput("Thank", "You");
        InputOutput("789", "JQK");
        InputOutput("QKA", "大小王");
        int i;
        for (i = 0; i < TemporaryVariables; i++)
        {
                printf("%s\n", TemporaryArray);
        }

        return 0;
}

shuofxz 发表于 2017-7-24 18:44:55

下面这两句你仔细看一下,TemporaryArray这个是char类型的,你却将*Click(字符串)赋值给它,当然会出问题啊,只会复制第一个字符过去
char TemporaryArray;
TemporaryArray = *Click;

后面return *TemporaryArray, 这个*TemporaryArray等同于TemporaryArray,但由于第一个问题,这里面只有TemporaryArray存了一个字符9,所以最终返回的只有'9'

下面是改过的,你的题目意思是把两个字符串合成一个输出到提示框中吧,所以后面用了strcat()函数,合并两个字符串
# include <stdio.h>
# include <windows.h>
# include <string.h>

int TemporaryVariables=0;
char TemporaryArray; //用来存放参数(字符串)的数组

char *InputOutput(char *Click, char *Keypress) //函数的定义
{
    if (Click!=NULL) //判断参数是否为空
    {
            strcpy(TemporaryArray, Click);
      TemporaryVariables++; //下标加一
    }

    if (Keypress!=NULL)
    {
            strcpy(TemporaryArray, Keypress);
      TemporaryVariables++; //下标加一
    }

        strcat(TemporaryArray, TemporaryArray);
    return TemporaryArray; //返回保存的数据
}

int main()
{
    MessageBox(NULL, InputOutput("91", "55"), NULL, MB_OK); //通过消息框的形式输出返回值
    return 0;
}

Anonymous 发表于 2017-7-24 21:07:41

shuofxz 发表于 2017-7-24 18:44
下面这两句你仔细看一下,TemporaryArray这个是char类型的,你却将*Click(字符串 ...

你理解错了,我的意思是用一个函数接受字符串,每次调用函数都保存传递进来的字符串,保存完返回保存的字符串
我发的代码只是我的构想,连编译都通不过,如果可以请帮忙写一份代码
我不是伸手党,这个问题我研究好几天了,没什么头绪,只希望你能帮助我

shuofxz 发表于 2017-7-24 22:07:19

匿名者 发表于 2017-7-24 21:07
你理解错了,我的意思是用一个函数接受字符串,每次调用函数都保存传递进来的字符串,保存完返回保存的字符 ...

我还是没太懂
你写的这个函数为什么有两个参数呢?两个参数都是做什么用的?
InputOutput("91", "55")

返回值应该是什么呢?
就比如你写的输入91 55, 返回值还是91 55么?

还有“保存”是干什么用的呢?
是后面再调用这个函数的时候,把之前的值也一起返回么?
InputOutput("91", "55")
InputOutput("11", "22")
InputOutput("33", "44")
就比如连续执行这三行代码后,每次都应该返回什么呢?

Anonymous 发表于 2017-7-25 10:05:49

本帖最后由 匿名 于 2017-7-25 10:13 编辑

shuofxz 发表于 2017-7-24 22:07
我还是没太懂
你写的这个函数为什么有两个参数呢?两个参数都是做什么用的?
InputOutput("91", "55" ...


感谢,我又把代码重新标注了一遍,并且加入了点别的代码,好让你理解我的想法(代码可能无法通过编译,只作为理解使用),代码如下



# include <stdio.h>
# include <windows.h>
# include <string.h>

static int TemporaryVariables=0; //用来存放下标
static char TemporaryArray={'0'}; //用来存放参数(字符串)的数组,这里应该是这样的下标 [无限大] 好为多次调用做准备; 顺便初始化数组元素,防止数组中出现其他数据

//由于数组和和变量均在函数外,理论上来说都是全局形式的,不会因为函数返回而被释放,为了能更直观的表达我的意思,在全局数组和变量前都加上"static" 声明为静态局部变量,用于扩充作用域

char *InputOutput(char *Click, char *Keypress) //函数的定义
{
    if (Click!=NULL) //判断参数(Click)是否为空,如果不为空,就把数据存到二维数组里
    {
            strcpy(TemporaryArray , Click); //这个就是二维数组,下标为: 的二维数组
      TemporaryVariables++; //下标加一
    }

    if (Keypress!=NULL) //判断参数(Click)是否为空,如果不为空,就把数据存到二维数组里
    {
            strcpy(TemporaryArray , Keypress); //这个就是二维数组,下标为: 的二维数组
      TemporaryVariables++; //下标加一
    }

        // TemporaryVariables 是用来存放和下标的,不做索引使用,只是为了让参数依次存放到数组中

      //strcat(TemporaryArray, TemporaryArray); //这里不要连接两个字符,容易混淆

        /*
        // TemporaryArray={'\0', '\0', '\0', '\0', '\0', '\0', }; //这段的目的是用来标志数组的结束,方便主调用函数的判断,每次传递进来新数据都会覆盖这一段,如果不向这段写入数据,则将这段定义为结束标志
        */

    return TemporaryArray; //返回数组中保存的数据
}

int main()
{
    //MessageBox(NULL, InputOutput("91", "55"), NULL, MB_OK); //这里先不通过通过消息框的形式输出返回值,容易混淆
       
        InputOutput('Thank', "You") // 这里只是象征性的调用一下,我的想法在下边↓↓↓↓↓↓↓↓↓
       
        /*
        //返回值不一定是数组首地址的形式,也可以返回指针,通过检测是否为'\0'来判断是否结束,这整段代码用的是返回数组首地址的形式传递字符串参数

        InputOutput("123", "456"); //此时调用完函数 应该是得到 TemporaryArray="123", TemporaryArray="456", TemporaryArray="\0" 这样的返回值
        InputOutput("789", "JQK"); //此时调用完函数 应该是得到 TemporaryArray="123", TemporaryArray="456", TemporaryArray="789", TemporaryArray="JQK", TemporaryArray="\0" 这样的返回值
        InputOutput("QKA", "大小王"); //此时调用完函数 应该是得到 TemporaryArray="123", TemporaryArray="456", TemporaryArray="789", TemporaryArray="JQK", TemporaryArray="QKA", TemporaryArray="大小王", TemporaryArray="\0" 这样的返回值
       
        // 每次调用结束都返回数据,因为不知道哪会就不在调用了,所以每次都返回;上边的这段是我构想的返回形式,方便理解,不一定能通过编译
        */

    return 0;
}
页: [1]
查看完整版本: 如何将函数的参数保存起来,并通过数组或指针的形式返回保存的数据