C语言如何在被nodejs回调函数返回值中返回一个数组的全部值?

欢迎加入我们,一同切磋技术。 &
用户名: &&&
密 码: &
共有 10417 人关注过本帖
标题://请编写函数fun,该函数的功能是:删去一维数组中所有相同的数,使之只剩下 ...
等 级:新手上路
结帖率:33.33%
&&已结贴√
&&问题点数:20&&回复次数:5&&&
//请编写函数fun,该函数的功能是:删去一维数组中所有相同的数,使之只剩下一个。函数返回删除后数组中元素的个数。
#include&stdio.h&
int fun(int a[],int n)
&&& int i,j,x,
&&& for(i=0;i&n-1;i++)
&&&&&&&&for(j=i+1;j&n;j++)
&&&&&&&&&&&&if(a[j]==a[i])
&&&&&&&&&&&&{
&&&&&&&&&&&&&&& for(x=j;x&n-1;x++)
&&&&&&&&&&&&&&& {
&&&&&&&&&&&&&&&&&&&&a[x]=a[x+1];
&&&&&&&&&&&&&&& }
&&&&&&&&&&&&&&& n--;
&&&&&&&&&&&&&&& i--;
&&&&&&&&&&&&}
&&& num=n;
int main()
&int a[100],i,n,
&&& scanf(&%d&,&n);
&for(i=0;i&n;i++)
&&scanf(&%d&,&a[i]);
&num=fun(a,n);
&for(i=0;i&i++)
&&printf(&%5d&,a[i]);
不知道哪里错了,提交时总是出现1.main.c:8:Bounds error: attempt to reference an illegal pointer&&&2.main.c:8:&&Pointer value: 0xbf8622ac
搜索更多相关主题的帖子:
来 自:斗气大陆
等 级:贵宾
威 望:43
帖 子:2218
专家分:13561
我这里调试没有错误啊...
你的错误提示好像是数组越界了,可是我又没看到数组越界的地方
附件: 您没有浏览附件的权限,请
三十年河东,三十年河西,莫欺少年穷!
等 级:蒙面侠
帖 子:812
专家分:4151
初步没发现什么错误啊
一花一世界、一叶一追寻、片片花叶落、情系何人身。
等 级:新手上路
回复 2楼 韶志
作业提交的时候无结果,j最大取num-1, x=j也会取num-1,这时a[x+1]是不是越界了?可是不会改啊
来 自:斗气大陆
等 级:贵宾
威 望:43
帖 子:2218
专家分:13561
&&得分:20&
回复 4楼 笨蛋一个
确实是这地方越界了
你试试这样改&&& 红色部分
#include&stdio.h&
int fun(int a[],int n)
&&& int i,j,x,
&&& for(i=0;i&n-1;i++)
&&&&&&&&for(j=i+1;j&n;j++)
&&&&&&&&&&&&if(a[j]==a[i])
&&&&&&&&&&&&{
&&&&&&&&&&&&&&& if(j&n-1){
&&&&&&&&&&&&&&&&&&&&for(x=j;x&n-1;x++)
&&&&&&&&&&&&&&&&&&&&{
&&&&&&&&&&&&&&&&&&&&&&&&a[x]=a[x+1];
&&&&&&&&&&&&&&&&&&&&}
&&&&&&&&&&&&&&& }
&&&&&&&&&&&&&&& n--;
&&&&&&&&&&&&&&& i--;
&&&&&&&&&&&&}
&&& num=n;
int main()
int a[100],i,n,
&&& scanf(&%d&,&n);
for(i=0;i&n;i++)
&&scanf(&%d&,&a[i]);
num=fun(a,n);
for(i=0;i&i++)
&&printf(&%5d&,a[i]);
三十年河东,三十年河西,莫欺少年穷!
等 级:新手上路
回复 5楼 韶志
好的,谢谢你。
版权所有,并保留所有权利。
Powered by , Processed in 0.104502 second(s), 7 queries.
Copyright&, BCCN.NET, All Rights ReservedC语言中函数如何返回处理后的结果? - 前进,前进,前进! - CSDN博客
C语言中函数如何返回处理后的结果?
在c语言中,自动变量在堆栈中分配内存,当包含自动变量的函数或代码块退出时,它们所占用的内存便被回收。被回收的内存可能会被马上覆盖,也可能等到很久以后才会被覆盖,这取决于堆栈中先前的自动变量位于何处,下一个函数/代码块声明的变量/写入的内容等条件,所以如果有以下代码:
char * func(){
char buffer[512];
那么这个函数会导致一个难以察觉的bug。我想在调用函数中获取buffer里的内容,但有时候能够“正常”获取,有时候数据被破坏了……
解决这个问题有几种方案。
1. 返回一个指向字符串常量的指针。例如:
char * func(){
/* 只适用于简单字符串 */
return "Only works for simple strings";
这是最简单的解决方案,但实际应用中一般有更多的需求。
2. 使用全局声明的数组。例如:
char globalArr[512];
char * func(){
globalArr[i] = ...
return globalA
这适用于自己创建字符串的情况,也很简单易用。它的缺点在于任何人都有可能在任何时候有修改这个全局数组,而且函数的下一次调用也会覆盖该数组的内容。
3. 使用静态数组。例如:
char * func(){
static char buffer[512];
这就可以防止任何人修改这个数组。只有拥有指向该数组的指针的函数(通过参数传递给它)才能修改这个静态数组。但是,该函数的下一次调用将覆盖这个数组的内容,所以调用者必须在此之前使用或备份这个数组的内容。和全局数组一样,大型缓冲区如果闲置不用是非常浪费内存空间的。
4. 显示分配一些内存,保存返回的值。例如:
char * func(){
char *s = malloc(512);
这个方法具有静态数组的优点,而且在每次调用时都将创建一个新的缓冲区,所以该函数每次调用的内容不会互相干扰,这使它适合多线程的代码。它的缺点在于函数的使用者必须承担内存管理的责任。如果内存正在使用却被释放,或者不再使用的内存还没有被回收,就会发生内存泄露,这会产生令人难以置信的bug。
5. 这可能是最好的方法,就是要求调用者分配内存来保存函数的返回值。
为了提高安全性,调用者应该同时指定缓冲区的大小(就像标准库中fgets()所要求的那样)
void func(char * result, int size){
strncpy(result, "string", size);
buffer = malloc(size);
func(buffer, size);
free(buffer);
这个方法相较于上一个方法,优点在于程序员能在同一个代码块中同时进行”malloc”和”free”操作,内存管理要轻松许多。
我的热门文章2被浏览181分享邀请回答0添加评论分享收藏感谢收起您所在位置: &
&nbsp&&nbsp&nbsp&&nbsp
如何编写有多个返回值的C语言函数.pdf 3页
本文档一共被下载:
次 ,您可全文免费在线阅读后下载本文档。
下载提示
1.本站不保证该用户上传的文档完整性,不预览、不比对内容而直接下载产生的反悔问题本站不予受理。
2.该文档所得收入(下载+内容+预览三)归上传者、原创者。
3.登录后可充值,立即自动返金币,充值渠道很便利
需要金币:150 &&
如何编写有多个返回值的C语言函数.pdf
你可能关注的文档:
··········
··········
”卜_而蒜函癣柜蕊
文章编号:08)08-0108—03
如何编写有多个返回值的C语言函数
吴红梅,韩倩
(茂名职业技术学院计算机工程系,广东茂名525000)
摘要:本文从全局变量、数组指针、结构体三种途径深入探讨了如何实现有多个返回值的C语言函数。
关键词:函数;全局变量;数组;结构体
中图分类号:G642
文献标识码:B
可以考虑把要返回的多个值定义成全局变量。当函数被
调用时,全局变量被更改,我们再把更改后的全局变量
笔者从事C语言教学多年,在教学中学生们常常会问
值应用于主调函数中。函数被调用后被更改后的全局变
到如何编写具有多个返回值的C语言函数。编写有多个返
量值即为函数的数个返回值。下面以一个实例演示该方
回值的函数是所有C语言教材里均没有提到的知识点,但
法的应用。
在实际教学与应用的过程中我们都有可能会遇到这样的
实饲l:编写函数求3个数中的最大值与最小值。
问题。有学生也尝试了不少方法:如把多个需要返回的值
方法:把最大值、最小值分别定义成2个全局变量
作相应的处理后变成一个可以用return语句返回的数据,
max、min,在用户自定义函数中把求出来的最大值与最小
再在主调函数中拆开返回的数据使之变成几个值;或者把
值分别赋给全局变量max、min。函数调用完毕后全局变
需要返回多个值的一个函数分开几个函数去实现多个值
量的max、min值即保存了函数要求返回的值。程序参考
的返回。这些方法虽然最终都能实现返回要求的多个值,
代码如下:
但从程序算法的合理性与最优化方面去考虑,显然不理
#include”stdio.h”
想。我们知道C语言函数的返回值是通过函数中的return
#include”eonio.h”
语句来实现的,可是每调用一次函数,return语句只能返
max,min;/*定义两个全局变量用于保存函数返回值+/
回一个值。那么当我们希望从一个函数中返回多个值时,
min(inta,intb,intc)/.定义求最大最小值的
用什么方法去实现比较合理呢?在教学过程中,我建议学
生跳出对return语句的定势思维,一步步引导学生通过几
{max--min=a;严初始化最大最小值·/
种间接方式实现多个返回值的C语言函数。以下是笔者在
教学过程中引导学生采用的三种不同方法编写多个返回
正在加载中,请稍后...

我要回帖

更多关于 回调函数返回值 的文章

 

随机推荐