深入理解计算机系统---1(函数栈)

#include <stdio.h>
#include <stdlib.h>
void getxs(char * buf)
{
 char c;
 char pre1 = 0, pre2 = 0;
 int i = 0; n = 0;
 c = getchar();
 while (1)
 {
  if (c == 0x20 || c == 0x0A)
  {
   buf[i] = pre1 * 0x10 + pre2;
   pre1 = 0;
   pre2 = 0;
  }
  else
  {
   if (c >= '0' && c <= '9')
   {
    if (0 == pre1)
    {
     pre1 = c - '0';
    }
    else if (0 == pre2)
    {
     pre2 = c - '0';
    }
    else
    {
     pre1 = pre2;
     pre2 = c - '0';
    }
   }
   else if (c >= 'a' && c <= 'f')
   {
    if (0 == pre1)
    {
     pre1 = c - 'a' + 10;
    }
    else if (0 == pre2)
    {
     pre2 = c - 'a' + 10;
    }
    else
    {
     pre1 = pre2;
     pre2 = c - 'a' + 10;
    }
   }
  }
  c = getchar();
 }
 for (; n < i; n ++)
 {
  printf("n:%d; c:%x\n", n, buf[n]);
 }
}
int getbuf()
{
#if system == win32

 int i = 1;
 int buf[2];
#else if system == linux



 int buf[2];
 int i = 1;
#endif
 getxs((char *)buf);
 return i;
}

void show()
{
    int val;
    printf("Please enter Hex:");
    val = getbuf();
    printf("val = 0x%x\n", val);
    
}

这个例子中,我们调用getbuf()并打印其返回值,getbuf默认返回1.但是如果我们输入特定的字串则会出现意想不到的结果,比如这里输入:30 31 32 33 34 35 36 37 ef be ad de
结果:val=0xdeadbeef。

这是一个栈的使用问题,当然在不同的系统上还是用差异的。这里我给出了win32和linux的格式。
这里是回答《深入理解计算机系统(第一版)》的例子,因为年代久远,所以只能用这种方式实现,但是在第二版中,这个例子已经被拿掉了,比较可惜。

 

转载于:https://my.oschina.net/u/272160/blog/520940

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值