关于C的有趣问题

//以下程序是实现小写转大写程序

#include<stdio.h>
void to_upper(char *str)
{
    for(;*str !='/0';str++)
    {
        if(unsigned(*str-'a')<='z'-'a')
            *str-='a'-'A';//小写转成大写
    }
}
void main()
{
    char *str="Are you ready?";
    to_upper(str);
    printf("%s/n",str);
}

以上程序在编译和连接都通过了,但却得不出结果!!

char *str="Are you ready?";对应的汇编


004010A8   mov         dword ptr [ebp-4],offset string "Are you ready?" (00422020)

 

改正为:

#include<stdio.h>
void to_upper(char *str)
{
    for(;*str !='/0';str++)
    {
        if(unsigned(*str-'a')<='z'-'a')
            *str-='a'-'A';//小写转成大写
    }
}
void main()
{
    char str[]="Are you ready?";
    to_upper(str);
    printf("%s/n",str);
}

 

输出:ARE YOU READY?

 

char str[]="Are you ready?"对应的汇编:


004010A8   mov         eax,[string "Are you ready?" (00422020)]
004010AD   mov         dword ptr [ebp-10h],eax
004010B0   mov         ecx,dword ptr [string "Are you ready?"+4 (00422024)]
004010B6   mov         dword ptr [ebp-0Ch],ecx
004010B9   mov         edx,dword ptr [string "Are you ready?"+8 (00422028)]
004010BF   mov         dword ptr [ebp-8],edx
004010C2   mov         ax,[string "Are you ready?"+0Ch (0042202c)]
004010C8   mov         word ptr [ebp-4],ax
004010CC   mov         cl,byte ptr [string "Are you ready?"+0Eh (0042202e)]
004010D2   mov         byte ptr [ebp-2],cl

 

 

 

现分析如下:

     char str[]="Are you ready?"

     char *str="Are you ready?"

第一个str是一个字符数组,你可以对数组元素进行修改,而指针str指向一个字符串常量
,它是不可修改的;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值