为了账号安全,请及时绑定邮箱和手机立即绑定

要的结果是 〔ABC〕〔BCF〕 实际运行结果是 〔BCF][BCF] 怎么改?

要的结果是 〔ABC〕〔BCF〕 实际运行结果是 〔BCF][BCF] 怎么改?

C
哔哔one 2023-03-12 18:14:36
char *upper(char *s_str){static char d_str[20];strcpy(d_str,s_str);int len_str=0,i=0;len_str=strlen(s_str);for(i=0;i<len_str;i++){if(d_str[i] >=97){d_str[i] = d_str[i]-32;}}return d_str;}int main(int argc,char **argv){  char tmp[20];memset(tmp,0,sizeof(tmp));sprintf(tmp,"[%s][%s]\n",upper("abc"),upper("bcf"));printf("%s",tmp);return 0;  }
查看完整描述

2 回答

?
婷婷同学_

TA贡献1844条经验 获得超8个赞

我可以告诉你为什么这样:
因为函数内声明的static变量在整个程序的声明周期只对应一个内存区域,就是说upper("abc")的返回值被upper("bcf")的返回值覆盖了。
可以这样修改:
char* upper(char* s_str, char* d_str)
{
strcpy(d_str,s_str);
int len_str=0,i=0;
len_str=strlen(s_str);
for(i=0;i<len_str;i++)
{
if(d_str[i] >=97)
{
d_str[i] = d_str[i]-32;
}
}
return d_str;
}


查看完整回答
反对 回复 2023-03-15
?
函数式编程

TA贡献1807条经验 获得超9个赞

为什么函数里面要这样static char d_str[20];定义呢?在多次调用的时候要保留d_str的值吗?
不用加static限定了

查看完整回答
反对 回复 2023-03-15
  • 2 回答
  • 0 关注
  • 82 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信