如何将函数的参数保存起来,并通过数组或指针的形式返回保存的数据
本帖最后由 匿名 于 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;
}
# 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;
}
下面这两句你仔细看一下,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;
}
shuofxz 发表于 2017-7-24 18:44
下面这两句你仔细看一下,TemporaryArray这个是char类型的,你却将*Click(字符串 ...
你理解错了,我的意思是用一个函数接受字符串,每次调用函数都保存传递进来的字符串,保存完返回保存的字符串
我发的代码只是我的构想,连编译都通不过,如果可以请帮忙写一份代码
我不是伸手党,这个问题我研究好几天了,没什么头绪,只希望你能帮助我 匿名者 发表于 2017-7-24 21:07
你理解错了,我的意思是用一个函数接受字符串,每次调用函数都保存传递进来的字符串,保存完返回保存的字符 ...
我还是没太懂
你写的这个函数为什么有两个参数呢?两个参数都是做什么用的?
InputOutput("91", "55")
返回值应该是什么呢?
就比如你写的输入91 55, 返回值还是91 55么?
还有“保存”是干什么用的呢?
是后面再调用这个函数的时候,把之前的值也一起返回么?
InputOutput("91", "55")
InputOutput("11", "22")
InputOutput("33", "44")
就比如连续执行这三行代码后,每次都应该返回什么呢? 本帖最后由 匿名 于 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]