一个很简单但很奇怪的C语言问题

#include<stdio.h>structst{charc;chars[80];};char*f(structstt);voidmain(){intk;structs... #include <stdio.h>
struct st{

char c ; char s[80];

};

char *f(struct st t);

void main ()

{ int k;

struct st a[4]={{'1',"123"},{'2',"321"},{'3',"123"},{'4',"321"}};

char *p;
for(k=0;k<4;k++)
{
p=f(a[k]);
printf("%s\n",p); //就是这句~~~
}
}

char* f(struct st t)

{int k=0;

while(t.s[k]!='\0'){

if(t.s[k]==t.c) return t.s+k;

k++;

}
return t.s;
}

这段代码作用是返回结构体中第一个字符出现在第二个字符串开始的位置,问题在那个printf()处,我调试的时候发现明明printf()前面的指针p已经指向正确的值了(比如第一个数组,p已经指向“123”了),但printf()后确实个空字符,后几个数组打印出来也是乱码,这是怎么回事呢??
展开
 我来答
荀梦江南
2009-10-18 · TA获得超过467个赞
知道小有建树答主
回答量:305
采纳率:0%
帮助的人:243万
展开全部
你的函数的形参传的是值,在进入函数时为struct st t分配空间,在函数结束后该空间被释放了,所以是乱码

试试用引用
char *f(struct st &t);//声明
char* f(struct st &t){}//定义
sh00p1
2009-10-18 · 超过14用户采纳过TA的回答
知道答主
回答量:35
采纳率:0%
帮助的人:42.3万
展开全部
我这里第运行结果
123
21
3
123
没有乱码
没搞清楚你想实现的功能
据猜测改了下代码,看看是不是你想要的
#include <stdio.h>
struct st{
char c ;
char s[80];
};

int f(struct st t);

void main ()
{
int k ;
struct st a[4]={{'1',"123"},{'2',"321"},{'3',"123"},{'4',"321"}};
int p;
for(k=0;k<4;k++)
{
p=f(a[k]);
printf("%d\n",p); /* 就是这句~~~ */
}
getch();
}

int f(struct st t)
{
int k=0;
while(t.s[k]!='\0')
{
if(t.s[k]==t.c) return k;
k++;
}
return -1;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
hujkyd
2009-10-19 · TA获得超过103个赞
知道小有建树答主
回答量:180
采纳率:0%
帮助的人:173万
展开全部
char* f(struct st t)
你这里是传值进去的,改成传址进去就好了
因为f返回的t是临时变量,函数结束后就会回收,所以这时候p指针说指向的地址是无定义的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式