怎样让函数返回一个二维数组?

SHOUYU2 2011-02-25 05:27:28
自己试验了一个程序如下,可以将字符窜按照字母一个个提取出来,存进一个二维数组,代码如下:
#include <stdio.h>
#include <string.h>
#include <iostream>
main()
{
char a[30]="apple0305book0209like1256";
static char b[5][15];
int flag;
int i=0;
int j=0;
int k=0;
char *p;
p=a;
while(i<30)
{
if(isalpha(a[i])!=0);
{
i++;
k++; //记录有多少个字母
}
strncpy(p,b[j],k+4);
p=p+k+4;
//printf("
puts(b[0]);
puts(b[1]);
}
getchar();
}

现在想将这个功能写到一个函数里面,应该怎样定义,自己试了下不行:
#include <stdio.h>
#include <string.h>
#include <iostream>

char out[10][15] loadwords(char *words)
{
char temp[10][15];
int i=0;
int j=0;
int k=0;
char *p;
p=words;

while(i<30)
{
while(isalpha(words[i])!=0)
{
i++;
k++; //记录有多少个字母
}
strncpy(out[j],p,k+4);
j++;
p=p+k+4;
i=i+4;
k=0;
}
return temp;
}

main()
{
char a[30]="apple0305book0209like1256";
//char b[100]="cook0406destination0708final1209sati1008crazy0102";
static char c[10][15];
c=loadwords(a);
puts(c[0]);
getchar();
}


...全文
1894 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
碎碎念 2011-02-26
  • 打赏
  • 举报
回复
返回一个二维指针吧....
P.S:这个指针要new出来....然后在不用的时候要记得delete....
cheneydc 2011-02-25
  • 打赏
  • 举报
回复
返回指针呗
飞翔的薄荷 2011-02-25
  • 打赏
  • 举报
回复
可以返回二维数组的指针 可惜没法确定大小
proghua 2011-02-25
  • 打赏
  • 举报
回复 1
char **p = (char **)malloc(row_num * sizeof(char *));
for (i = 0; i < row_num; i++)
p[i] = malloc(列数)

在loadwords的参数中直接传入参数p,进行操作即可
SHOUYU2 2011-02-25
  • 打赏
  • 举报
回复
谁能给一个 C代码用char**的实现啊?
失散糖 2011-02-25
  • 打赏
  • 举报
回复
楼主的想法好强大..
zhengjiankang 2011-02-25
  • 打赏
  • 举报
回复
请问楼主是要写C代码还是C++代码呢。
C++代码有现成的:std::vector<std::string>
C代码就用char**吧。

这种东西建议写成bool Function(__in __out param)格式。
一个函数可以返回若干多的东西
为什么一定要用返回值来返回啥啥啥呢。
SHOUYU2 2011-02-25
  • 打赏
  • 举报
回复
我试试指针+malloc算了,结构体估计必须固定大小的
SHOUYU2 2011-02-25
  • 打赏
  • 举报
回复
晕,把c.data=loadwords(a)写成c=loadwords(a)了。
为啥子非要用结构体来啊?
直接用二维数组为什么不行?
我不懂的
可乐崽 2011-02-25
  • 打赏
  • 举报
回复
返回二维数组指针就行了!

char *function(){
char **p = malloc(n*sizeof(char));
for(……){
p[i] = malloc(m);
}
return p;
}
mstlq 2011-02-25
  • 打赏
  • 举报
回复
编译ok版本

#include <stdio.h>
#include <string.h>
#include <ctype.h>
struct ma
{
char data[10][15];
};

struct ma loadwords(char* words)
{
struct ma out;
int i = 0;
int j = 0;
int k = 0;
char* p;
p = words;

while (i < 30)
{
while (isalpha(words[i]) != 0)
{
i++;
k++; //记录有多少个字母
}
strncpy(out.data[j], p, k + 4);
j++;
p = p + k + 4;
i = i + 4;
k = 0;
}
return out;
}


int main()
{
char a[30] = "apple0305book0209like1256";
//char b[100]="cook0406destination0708final1209sati1008crazy0102";
struct ma c;
c = loadwords(a);
puts(c.data[0]);
getchar();
return 0;
}
SHOUYU2 2011-02-25
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 mstlq 的回复:]
二维数组大小是确定的吗?
有个无聊的方法

C/C++ code
struct ma
{
char out[10][5]
};
/*返回值类型用struct ma吧,楼主懂的*/
[/Quote]
试了下,不行啊,是不是哪里写错了?

#include <stdio.h>
#include <string.h>
#include <iostream>
struct ma
{
char data[10][15];
};

struct ma loadwords(char *words)
{
struct ma out;
int i=0;
int j=0;
int k=0;
char *p;
p=words;

while(i<30)
{
while(isalpha(words[i])!=0)
{
i++;
k++; //记录有多少个字母
}
strncpy(out.data[j],p,k+4);
j++;
p=p+k+4;
i=i+4;
k=0;
}
return out;
}


main()
{
char a[30]="apple0305book0209like1256";
//char b[100]="cook0406destination0708final1209sati1008crazy0102";
struct ma c;
c.data=loadwords(a);
puts(c.data[0]);
getchar();
}


  • 打赏
  • 举报
回复
晕,搞错了。。不能那么返回 应该返回一维指针的
  • 打赏
  • 举报
回复
那就传入一个二维数组指针,让函数修改吧。
我一般都是这么干的。
C语言的很多函数也都是这么干的。
bdmh 2011-02-25
  • 打赏
  • 举报
回复
不如返回一个二级指针
  • 打赏
  • 举报
回复
char** loadwords(char *words)
{
static char temp[10][15];
int i=0;
int j=0;
int k=0;
char *p;
p=words;

while(i<30)
{
while(isalpha(words[i])!=0)
{
i++;
k++; //记录有多少个字母
}
strncpy(out[j],p,k+4);
j++;
p=p+k+4;
i=i+4;
k=0;
}
return temp;
}

mstlq 2011-02-25
  • 打赏
  • 举报
回复
楼主原本不也打算返回char out[10][15] 吗?
那样的话……
1楼就可以满足需求了……
SHOUYU2 2011-02-25
  • 打赏
  • 举报
回复
不确定,因为字符窜的长度不确定,所以提取的单词数不确定
mstlq 2011-02-25
  • 打赏
  • 举报
回复
二维数组大小是确定的吗?
有个无聊的方法
struct ma
{
char out[10][5]
};
/*返回值类型用struct ma吧,楼主懂的*/

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧