免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: piao2004
打印 上一主题 下一主题

[C] C语言新手,问个问题,在线等!!!!!!!!!!!!!! [复制链接]

论坛徽章:
0
11 [报告]
发表于 2007-10-12 10:15 |只看该作者
用%x打出来是a = [2ff221c4],还是搞不懂为什么%s没有值,难到CC编译的时候要跟什么特殊的参数?

论坛徽章:
0
12 [报告]
发表于 2007-10-12 10:19 |只看该作者
2ff221c4是a的地址,跟内容没关系。

论坛徽章:
0
13 [报告]
发表于 2007-10-12 11:27 |只看该作者
那怎么样才能看到a的值是10呢,这种写法应该是没问题的

论坛徽章:
0
14 [报告]
发表于 2007-10-12 12:26 |只看该作者
没有理解好strcpy()函数吧,char *strcpy(char *dest, const char *src);
strcpy(a, (char *)&l);  把  l 地址的“字符串”拷贝到a所指的内存地址,对小端法的机器,long型的10在内存里的是a 0 0 0,在大端法的机器里面是 0 0 0 a,AIX的应该是大端法的CPU啦,所以楼主看到的打印空的,因为strcpy的src就是0啊,根本不会把a拷贝过去,而对于像我这样的intel pc上玩LINUX的,当然是小端法,所以我的就把a拷过去了,a在对应的字符就是换行,所以我的是打印一个换行符。
不知道我说的对不对,不过自我感觉应该是这样的

论坛徽章:
0
15 [报告]
发表于 2007-10-12 12:30 |只看该作者
原帖由 piao2004 于 2007-10-12 11:27 发表
那怎么样才能看到a的值是10呢,这种写法应该是没问题的


sprintf(a, "%d", l);
不知道是不是你想要的?

论坛徽章:
0
16 [报告]
发表于 2007-10-12 13:10 |只看该作者
原帖由 king_boss 于 2007-10-12 12:30 发表


sprintf(a, "%d", l);
不知道是不是你想要的?


  1. sprintf(a, "%ld", l);
复制代码

论坛徽章:
0
17 [报告]
发表于 2007-10-12 13:26 |只看该作者

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. /* Convert Long Integer to String
  4. * char *_ltoa(long value, char *string, int radix)
  5. */
  6. int main(void)
  7. {
  8.     char szBuf[100];
  9.     long lValue = 10L;
  10.     memset(szBuf, 0x00, sizeof(szBuf) / sizeof(szBuf[0]) );

  11.     _ltoa(lValue, szBuf, 10);
  12.     printf("Buffer is: %s.\n", szBuf);

  13.     return 0;
  14. }
复制代码

论坛徽章:
0
18 [报告]
发表于 2007-10-12 13:49 |只看该作者
10是换行的asci值,用%s看不见。

论坛徽章:
0
19 [报告]
发表于 2008-07-05 22:55 |只看该作者
原帖由 piao2004 于 2007-10-12 09:27 发表
我写了段小代码
  #include

   main()
   {
     char  a[100];
        long  l;

        memset(a, 0, sizeof(a));
        l = 10;

        strcpy(a, (char *)&l);
   
        printf("a ...



关键要分析: strcpy(a, (char *)&l);
它实现功能是: 将 l 的数值拷贝到 a 中!
那么 l=10 中的 l在内存中是如何存放的呢!
这与操作系统有关系,

可测试下面的代码:

#include <stdio.h>

   main()
   {
     char  a[100];
     union for32OS
     {
        char dsp[4];
        long  l;
      }kk;

        memset(a, 0, sizeof(a));
        kk.l = 10;

        strcpy(a, (char *)&l);   
        printf("a=%s", a);
        /*看内存中 l 到底是如何存放的!*/
        printf("kk.dsp=[%02X %02X %02X %02X]", kk.dsp[0], kk.dsp[1], kk.dsp[2], kk.dsp[3]);
   }
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP