char * g_szHostName=new char[10];
可以吗?

解决方案 »

  1.   


    char * g_szHostName=new char[10];
    可以吗?
      

  2.   

    10个比较保险
    char * g_szHostName=new char[10];
    char g_szHostName[10];
    效果是一样的吧?有什么区别?
      

  3.   

    char * g_szHostName=new char[10];
    char g_szHostName[10];
    第一行是分配一块内存,程序结束前须手动释放内存,否则它一直不会被OS收回,除非你重起;
    第二行就不存在这个问题了
      

  4.   

    要有一个结束的标志,就是'\0',其ASCII就是0
      

  5.   

    怎么又问这个问题,当然是10个了,最后一个用来放字符串结尾标识Null
      

  6.   

    是的,这个我知道了呀
    char * g_szHostName=new char[10];
    char g_szHostName[10];
    这两种方法分别适用于什么情况?
      

  7.   

    第一种会立刻产生一个隐藏的构造函数调用,而在程序代码中看不出来。若内存申请成功,new运算返回一个指向新分配内存首地址的char类型的指针,可以通过这个返回值对堆对象进行访问,如果申请失败返回空指针。由delete删除new建立的对象,释放指针所指向的内存空间。
      

  8.   

    手动delete嘛,与new一一对应哦
      

  9.   

    如果只通过下标访问单个的字符,9个是不会错。
    如果想用strlen..., printf("%s",...),就要仔细考虑一下了。
      

  10.   

    如果你知道只有9个,那么只要9个byte就够了,节约是中国人民的传统美德嘛!
      

  11.   

    你要是不使用字符串函数(strlen()类似的)就不必分配10个字节,比如,你只是暂时转储一下,待会儿写入文件或转移到其他地方,当然不会不知道它有多少个有效的字节啦。
    总之,“亲自动手”处理时9个字节也可以。
    例:
    char str[] = "long string goes here"; //more than 9 chars
    char buf[9];                          //only 9 chars
    char *p1 = str,*p2 = buf;
    //copy from str -> buf
    for(int i=0;i<9;i++) *p2++ = *p1++;   //no matter
      

  12.   

    10(因为还包括一个字符串结束标志'/0',ascII码为0)
    如果不是有特别需要,为什么不用
    char string[]="……",何乐而不为呢?
      

  13.   

    to idler(Idler) 
    32位 局部变量 9个和12个 使用一样多的空间.
    16位 局部变量 9个和10个 使用一样多的空间.
    可以使用边界有的编译器可以使用边界值控制选项或指令.
    分配空间的变量dos是16以个为单位.
    其他的系统是多少有谁能告诉我?
      

  14.   

    先申请一个空的
    char str[]='123456789';
    再sizeof(str)不就知道了