char* kk;
char* pp="hhhhhhhhhhhhhhhhhh";
1。kk=pp    strcpy(kk,pp) 有什么区别?
2。kk的长度有没有限制,我的意思:pp的长度是多少,才能给kk安全赋值?

解决方案 »

  1.   

    kk没有赋值,根本不能用!
    kk=pp 把pp的值赋给kk,可用;
    strcpy(kk, pp) 把"hhhhhhhhhhhhhhhhhhh"拷贝到kk所指的区域,kk没有初始化,错误;char a[20];
    kk = a;
    strcpy(kk, pp);
      

  2.   

    (1) 答:kk=pp 表示把kk的地址设置为和pp一样
            也就是kk这个字符串和pp是一样的
            strcpy(kk,pp)表示把pp的字符串内容拷贝给kk
    (2) 答:kk的长度为4,pp的长度也是4
            因为它们都是指针,指针的长度都是4另外如果要安全附值
    请参考
    (1)  char kk[128],pp[128]="hhhhhhhhhhhhhhhhh";
         strcpy(kk,pp);
    (2)  char *kk,*pp;
         kk=(char *)malloc(128);
         pp=(char *)malloc(128);
         strcpy(kk,"hhhhhhhhhhhhh");注意:你提供的属于不安全的
          你可以把pp设置为“123456789”
          运行一下你的程序,你发现执行完后
          pp的值发生改变了
      

  3.   

    kk没有赋值,根本不能用!
    kk=pp 把pp的值赋给kk,可用;
    strcpy(kk, pp) 把"hhhhhhhhhhhhhhhhhhh"拷贝到kk所指的区域,kk没有初始化,错误;char a[20];
    kk = a;
    strcpy(kk, pp);
      

  4.   

    同意wjjchess(犀珈珈) 的看法,给空指针不安全的。须申请后指向一个空单元
      

  5.   

    1。kk=pp    strcpy(kk,pp) 有什么区别?
    --------
    区别是kk=pp是正确的,而strcpy(kk,pp)是错误的,编译能通过,但运行会出非法错,英为kk指针根本就没分配存储空间,2。kk的长度有没有限制,我的意思:pp的长度是多少,才能给kk安全赋值?
    -----------------------------------------
    kk长度不是有没有限制的问题,而是kk根本一个字节长度都没有。你应该这样:
    kk=malloc(sizeof(pp)+1);
    strcpy(kk,pp);
      

  6.   

    很欣赏wjjchess(犀珈珈) 的回答
    再深问一句:
    1。对于kk=pp,如果pp很长,会不会有问题?
    2。如果用malloc之后,给它赋值了,再用realloc,它的数据将发生什么变化?
      

  7.   

    1。对于kk=pp,如果pp很长,会不会有问题?
       无论pp多长多短,都没问题,因为按上面他们都是指针
       就是说kk和pp在内存里面的地址是一样的2。如果用malloc之后,给它赋值了,再用realloc,它的数据将发生什么变化?
       没问题,你可以看如下例子
    #include <stdio.h>
    #include <malloc.h>
    #include <stdlib.h>void main( void )
    {
       long *buffer;
       size_t size;   if( (buffer = (long *)malloc( 1000 * sizeof( long ) )) == NULL )
          exit( 1 );   size = _msize( buffer );
       printf( "Size of block after malloc of 1000 longs: %u\n", size );   /* Reallocate and show new size: */
       if( (buffer = realloc( buffer, size + (1000 * sizeof( long )) )) 
            ==  NULL )
          exit( 1 );
       size = _msize( buffer );
       printf( "Size of block after realloc of 1000 more longs: %u\n", 
                size );   free( buffer );
       exit( 0 );
    }
    OutputSize of block after malloc of 1000 longs: 4000
    Size of block after realloc of 1000 more longs: 8000