Chinaunix

标题: 帮忙看个程序 [打印本页]

作者: olivejs    时间: 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啊
作者: lenovo    时间: 2006-08-25 11:22
为什么要是99?
作者: mike_chen    时间: 2006-08-25 11:36
楼主好逗呀!
作者: flw    时间: 2006-08-25 14:07
C 语言不是动态语言,
因此不具备将字符串当作程序来执行的功能。

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

C 不是 shell/perl,没有 eval。仅此而已。
作者: flw    时间: 2006-08-25 14:11
不过值得一提的是,楼主的“诧异”和楼下众人(包括另外重复的那个帖子里)的“诧异”,都说明了同一个问题:“先入为主”是多么可怕呀。整个儿一个坐井观天。各位有空了还是多了解几种不同类型的语言比较好。
作者: harly    时间: 2006-08-25 14:43
原帖由 flw 于 2006-8-25 14:11 发表
不过值得一提的是,楼主的“诧异”和楼下众人(包括另外重复的那个帖子里)的“诧异”,都说明了同一个问题:“先入为主”是多么可怕呀。整个儿一个坐井观天。各位有空了还是多了解几种不同类型的语言比较好


教训的是,以后还请老大多多指教。
作者: net_robber    时间: 2006-08-25 16:40
研究了近半个小时才明白,
搂主项要把   sysstr ;   当作  kkk= 99 用
不知道看的对不对???
作者: flw    时间: 2006-08-25 16:43
Perl 可以

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

未命名.GIF

作者: iwinux    时间: 2006-08-25 19:39
Python 可以吗? 这个功能好像被很多VBS的病毒运用...
作者: flw2    时间: 2006-08-25 20:08
这样的东西只有解释器会去做.
perl 看到eval,就知道后面的东西意味着什么.
在C(or c-like^^)中,编译器不会知道sprintf(sysstr , "kkk= 99") ;之后sysstr中是什么. 假如它生成一个代码去检查*sysstr,它能做什么呢,此时只能exec,system之类的.
区别:编译器编译完之后就不再运行了,而解释器刚好相反,一直在跑. 编译器失去了"灵活性",解释器失去了效率.

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




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2