问一个C语言编程的问题,关于字符串连接的。

xuexingyang 2011-03-11 09:57:11
问一个C语言编程的问题:

比如有这么两个函数:


func1()
{
int i=0;
for (i=0;i<10;i++)
{
func2(i,"aaaa");
}
}

int func2(int i,char *string)
{
char *strTemp=(char *)malloc(LEN)
memset(strTemp,0x00,sizeof(strTemp));

//programm to be added here
/*
** ?????
*/
}

func2中????处需要完成的功能如下:

当形参小于某个数字比如5时,会将传来的字符串链接一起赋给strTemp;
也就是说,strTemp将每次传来的字符串连接起来保存着的;
当形参为5时,就结束,返回最终得到的连接在一起的字符串。


想了好久没有得出答案,请高手指点一二,谢谢!!
...全文
189 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
xuexingyang 2011-04-01
  • 打赏
  • 举报
回复
换了个其他的办法,先结了。谢谢各位。
xuexingyang 2011-03-15
  • 打赏
  • 举报
回复
看来大家都比较忙啊,再等等看高人回答了。
justkk 2011-03-11
  • 打赏
  • 举报
回复
f4(int i, char *p)
{
static char s[1024];
strcat(s, p);
if( i>5 ) f5(s);
}
xuexingyang 2011-03-11
  • 打赏
  • 举报
回复
转眼间这么多的回复,非常感谢大家的指点:
刚才也许是我说的不清楚,具体是这样的:

原来的代码如下:

f1()
{
for(int i=0;i<5;i++)
f2();
}

f2()
{
f3();
}

f3()
{
//根据f1中i的不同生成字符串str
f4(str);
}

f4()
{
...
f5(str);//最后通f5将产生的每个str发出去。
}

注:代码中参数和返回值没有具体表明,应该不影响我们讨论。

我想最后将每次产生的str连接起来,一起发给f5,而不是每次产生一个str就发给f5.

请问该怎么处理,谢谢!!
lx3275852 2011-03-11
  • 打赏
  • 举报
回复
你写的明显就不对
首先,返回类型应该是一个char*类型
其次,你的fun函数里,没有接受这个字符串的变量,你到时候怎么获得这个字符串?
再次,你每次调用fun2函数,char *strTemp=(char *)malloc(LEN);memset(strTemp,0x00,sizeof(strTemp));都会清0,最后又得free掉(不free会内存泄露),顶如什么都没做啊。。。
最后,你是不是把N各字符串连接起来?试一试<string.h>里德strcat函数
代码如下:

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

void cat( char* a, char *b, int c )
{
if( c < 5 )
strcat( a, b );
}

int main()
{
char *str[10] = { "aaa", "bbb", "ccc", "ddd", "eee", "fff" };
int i;
char text[100] = {0};
for( i = 0; i < 10; i++ )
{
cat( text, str[i], i );
}
printf( "text = %s\n", text );
}
selooloo 2011-03-11
  • 打赏
  • 举报
回复
没看懂你的意思,字符串连接可以用strcat
bdmh 2011-03-11
  • 打赏
  • 举报
回复
使用strcat要注意strTemp必须足够容纳string的值才行,否则会溢出
LaSt_C_ 2011-03-11
  • 打赏
  • 举报
回复
strcat(strTemp, string);

free(strTemp);
yyg990441 2011-03-11
  • 打赏
  • 举报
回复

char* func2(int i,char *string)
{
static char[100] strTemp={0};
if(i<5) strcat(strTemp,string);
return strTemp;
}
xuexingyang 2011-03-11
  • 打赏
  • 举报
回复
To:justkk 或者了解这个问题的人!

如楼上所说,这种办法在第一次使用时是可行的,主要是用了“static”这种存储方式。

但是有个新的问题:
假设这样,第一次调用f1后,直到把数据(假设为“first_string”)传给f5完成后,
如果第二次调用一下f1(),那么在f4中存储在数组s中的字符串(“first_string”)就会保留下来。
第二次发给f5的字符串前面就会多了这个字符串“first_string”,所以,问题时,如何在每次调用f1时清空这个静态字符串数组,或者说如何避免这个问题。

69,364

社区成员

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

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