免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1769 | 回复: 9
打印 上一主题 下一主题

帮忙看个程序 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-08-25 11:16 |只看该作者 |倒序浏览
#include <stdio.h>
#include <stdlib.h>

main()
{
   int  kkk ;
   char sysstr[1000] ;

   kkk= 1000 ;
   sprintf(sysstr , "kkk= 99") ;
   sysstr ;

   printf("kkk=%ld\n" , kkk) ;
   exit(0) ;
}

为什么运行出来是kkk=1000,而不是我期望的99啊

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
2 [报告]
发表于 2006-08-25 11:22 |只看该作者
为什么要是99?

论坛徽章:
0
3 [报告]
发表于 2006-08-25 11:36 |只看该作者
楼主好逗呀!

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
4 [报告]
发表于 2006-08-25 14:07 |只看该作者
C 语言不是动态语言,
因此不具备将字符串当作程序来执行的功能。

你 sprintf 虽然构造了一个 "kkk= 99" 这样子的 sysstr,但是它只是个字符串而已,你没法执行这段字符串,因此,kkk 的值还是 1000。

C 不是 shell/perl,没有 eval。仅此而已。

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
5 [报告]
发表于 2006-08-25 14:11 |只看该作者
不过值得一提的是,楼主的“诧异”和楼下众人(包括另外重复的那个帖子里)的“诧异”,都说明了同一个问题:“先入为主”是多么可怕呀。整个儿一个坐井观天。各位有空了还是多了解几种不同类型的语言比较好。

论坛徽章:
0
6 [报告]
发表于 2006-08-25 14:43 |只看该作者
原帖由 flw 于 2006-8-25 14:11 发表
不过值得一提的是,楼主的“诧异”和楼下众人(包括另外重复的那个帖子里)的“诧异”,都说明了同一个问题:“先入为主”是多么可怕呀。整个儿一个坐井观天。各位有空了还是多了解几种不同类型的语言比较好


教训的是,以后还请老大多多指教。

论坛徽章:
0
7 [报告]
发表于 2006-08-25 16:40 |只看该作者
研究了近半个小时才明白,
搂主项要把   sysstr ;   当作  kkk= 99 用
不知道看的对不对???

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
8 [报告]
发表于 2006-08-25 16:43 |只看该作者
Perl 可以

未命名.GIF (10.43 KB, 下载次数: 48)

未命名.GIF

论坛徽章:
0
9 [报告]
发表于 2006-08-25 19:39 |只看该作者
Python 可以吗? 这个功能好像被很多VBS的病毒运用...

论坛徽章:
0
10 [报告]
发表于 2006-08-25 20:08 |只看该作者
这样的东西只有解释器会去做.
perl 看到eval,就知道后面的东西意味着什么.
在C(or c-like^^)中,编译器不会知道sprintf(sysstr , "kkk= 99") ;之后sysstr中是什么. 假如它生成一个代码去检查*sysstr,它能做什么呢,此时只能exec,system之类的.
区别:编译器编译完之后就不再运行了,而解释器刚好相反,一直在跑. 编译器失去了"灵活性",解释器失去了效率.

perl中类型很少,它会观察上下文,编译器不会,因为没有时间去记住某个变量怎么用.但是解释器要做这些事都是要一定的时间了,它在运行的时候还要记住符号的信息.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP