我来出一道C++的题,如下,

#define Japan_EarthQuake 9.0

printf("Japan_EarthQuake is %s", ???);

我想你已经明白我的意思了。我要输出这个内容,并希望define改了后,也可以输出正确的值。
不要说把???改为 "9.0", 也不要说把 %s 改掉。
你知道怎么做吗? 允许在 printf 前加其它代码

如果你会做,恭喜你,你已经是高手了!

WinMount继续招聘C++程序员和有志于学习Android开发的年轻人!请把简历发到 support@winmount.com
工作地点:苏州,上海,深圳

我还有两道题,一并发出来,有兴趣的可以试着做一做

*说一下函数 strncpy 的行为,分三条。允许查资料。
*在Win7运行 taptib,调整窗口的大小,会发现窗口高度大到一定值就不能再大了。设法让它更大。

  • 标 题:答复
  • 作 者:blueapplez
  • 时 间:2011-03-16 10:45:47

第一题。(本人理解  感觉不太对劲  但想不出来其他的理解方式了)

代码:
#define Japan_EarthQuake 9.0
  
char szJapan_EarthQuake[MAX_PATH] = {0};
sprintf(szJapan_EarthQuake, "%.1f", Japan_EarthQuake);

printf("Japan_EarthQuake is %s", szJapan_EarthQuake);
第二题(本人理解 未翻阅资料)。
int strncpy(char * OUT strDest,  const char * IN strSrc, int iLength);
1.assert(strDest &&  strSrc);
2.assert(iLength>0);
3.确保 (strSrc, strSrc+iLength) 之间没有NULL  不要比较 lstrlen(strSrc) 和 iLength大小 
第三题。
。。。

  • 标 题:答复
  • 作 者:LiuTaoTao
  • 时 间:2011-03-16 10:52:46

blueapplez的做法不好。虽然你完成了,但你应该知道我想考核什么内容
blueapplez的第二题没理解题意,我要的是“说明它的行为”,你写的是使用注意事项

5楼的 nevergone 做得有点意思了,但你改了我的define,这不行的。如果define能改,你直接改成 "9.0"了

7楼8楼做对了

第二题还没人做对."说明strncpy的行为",这句话都没有理解
不是让你写如何调用它,是让你写它干了什么

  • 标 题:答复
  • 作 者:cntrump
  • 时 间:2011-03-16 12:03:03

引用:
我要输出这个内容,并希望define改了后,也可以输出正确的值。
把任意东西转为 string . 其中包括本身就是 string 的。
7 楼 , 8 楼 太强悍了. 无法学习, 只能膜拜.
代码:
#if defined(UNICODE) || defined(_UNICODE)
#define  _T(x)      L#x
#define  TEXT(x)  _T(x)
#else
#define  _T(x)     #x
#define  TEXT(x)  _T(x)
#endif

*说一下函数 strncpy 的行为,分三条。允许查资料。

代码:
char *strncpy(
   char *strDest,
   const char *strSource,
   size_t count 
);
1.  判断参数合法性。
2.  判断源字符串地址是否对齐于 32 位地址边界, 不对齐则进行调整, 使目标地址对齐于 32 位地址边界。
3.  每次按 dword 进行传递。

小弟孤陋寡闻, 求教 taptib 是什么?

  • 标 题:答复
  • 作 者:lyricC
  • 时 间:2011-03-16 12:04:14

来吧我来给个正确答案,这也算高手问题??

#define Japan_EarthQuake 9.0

#define _ToStr(x) #x
#define __ToStr(x) _ToStr(x)
#include <stdio.h>

int main(int argc, char **argv)
{

  printf("Japan_EarthQuake is %s", __ToStr(Japan_EarthQuake));
  return 0;
}

  • 标 题:答复
  • 作 者:叶xiang
  • 时 间:2011-03-16 12:08:45

#define Japan_EarthQuake 9.0

#define _stringer(x)  #x
#define stringer(x)  _stringer(x)
printf("Japan_EarthQuake is %s",stringer(Japan_EarthQuake));

  • 标 题:忐忑的回答个
  • 作 者:Vsbat
  • 时 间:2011-03-16 12:55:13


代码:
#include <stdio.h>

int main()
{
  #define _ToStr(x) #x
  #define __ToStr(x) _ToStr(x)
  #define Japan_EarthQuake 9.0
  #define printf(x,y) printf(x,__ToStr(Japan_EarthQuake));
  printf("Japan_EarthQuake is %s", ???);
  return 0 ;
}
// Vsbat

  • 标 题:答复
  • 作 者:LiuTaoTao
  • 时 间:2011-03-21 14:32:24

公布答案!
宏定义的问题,已经有人做出来了,不再赘述。需要两次define
描述strncpy的行为:
strncpy 的定义是:
char* strncpy(char* dest, const char * source, size_t count);
第一点:如果source串的长度比count长,只复制count长的串,后面不会补串结尾符'\0'
第二点:如果count比source串要长,则长出的部分会全部补0
第三点:函数不检查dest的长度。如果dest分配的内存比count短,会溢出

这道题,我注明是可以查资料的。要考核的是你查完资料后,能不能说清楚。居然没有一个正解,遗憾。

继续招聘中!!!这两天居然没简历收到