问题一:
char tmp[10];
sprintf(tmp,"1234567890abc");为什么以上程序运行正常,tmp=124567890abc, tmp不是已定义为10长度吗?,这样不是应该越界吗?问题二:
在我理解中,string 应是等于char[]的,但是为什么以下程序不正确呢?
CString s;
char tmp[10]={'1','2','3','4','5','6','7','8','9','0'};s=char;问题三:指针的指针表示什么?如:
int* p=12;
*p=?
还是就是int* p与int *p是同一回事吗?

解决方案 »

  1.   

    char tmp[10];
    sprintf(tmp,"1234567890abc");为什么以上程序运行正常,tmp=124567890abc, tmp不是已定义为10长度吗?,这样不是应该越界吗?在debug版本模式下,系统会给你默认多分配一点无用的堆栈空间,虽然已经越界了,但是写到无用的堆栈空间去了,无所谓,改成release版本编译试试
      

  2.   

    第一个,问题确实已经越界了,但是不是所有的越界都会马上出问题的。但是出问题是早晚的事
    第二个 
    CString s; 
    char tmp[10]={'1','2','3','4','5','6','7','8','9','0'}; 
    s=char;   //这个地方出了问题 应该是 s = tmp
    第三个:int* p与int *p是一回事  还有一种写法 : int * p 都是可以的
    但是要看公司的编码规范,具体的写法。
     
      

  3.   

    第一个问题:
    因为C语言在进行字符串操作时不检查字符串的空间是否够大,所以可能会出现数组越界而导致程序崩溃的问题。即使碰巧,程序没有出错,也不要这么用,因为早晚会出错。所以一定要在调用sprintf之前分配足够大的空间给buf。
    第二个问题:
    s是CString对象,char是数据类型,您把数据类型给一个类型的对象?
    第三个问题:
    *p=12;
    int* p和int *p本来就是一回事情。
    至于采用什么写法完全是个人喜好问题。
      

  4.   

    问题一:
    楼上的已回答了问题二:
    CString s; 
    char tmp[10]={'1','2','3','4','5','6','7','8','9','0'}; s=char;//应该改为s=tmp;问题三:
    int *p=12;申请一个指向常量的指针,指针名为p,指针首地址的内容为*p
    所以
    *p=12
      

  5.   

    s = char ..
    笑过