深入理解计算机系统---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的格式。
这里是回答《深入理解计算机系统(第一版)》的例子,因为年代久远,所以只能用这种方式实现,但是在第二版中,这个例子已经被拿掉了,比较可惜。

 

你可能感兴趣的:(linux,C语言,栈,/win32)