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;
}
- 2 回答
- 0 關注
- 108 瀏覽
添加回答
舉報
0/150
提交
取消