main()

   char buffer[96];
   scanf("%s",buffer);
    
}假如我不知道buffer的大小为96,在程序中如何获得buffer的大小。
不是实际串的大小。

解决方案 »

  1.   

    sizeof( buffer) / sizeof( buffer[0] );=96獲的元素個數.
    sizeof( buffer)=96*sizeof(char)..總尺寸
    sizeof(buffer[0])=sizof(char);..一個元素尺寸
      

  2.   

    不行
    char * my_strcpy(char *dest,const char* src)
    {
            int i;
            i = sizeof(dest);
            printf("%d",i);
            
    }
    将buffer作为第一个参数带入后输出为4,是这个指针的大小。
    我说的是求这个缓冲区buffer实际大小。
      

  3.   

    #include "string.h"
    ...
    strlen(buffer);
    ....
      

  4.   

    sorry ! 看错了。
    缓冲区的大小:sizeof( buffer) / sizeof( buffer[0] );就可以了。
      

  5.   

    main()

       char buffer[96];
       scanf("%s",buffer);
        
    }将buffer作为下面第一个参数带入,输入仍为4。
    在main中sizeof(buffer)我当然知道可以。
    关键是求带入下面函数以后怎么求的96。
    char * my_strcpy(char *dest,const char* src)
    {
            int i;
            i = sizeof(dest);
            printf("%d",i);
            
    }
      

  6.   

    i =sizeof( buffer)

    char buffer[96];CString str =buffer;
    i=str.GetLenght()
      

  7.   

    char * my_strcpy(char *dest,const char* src)
    {
            int i;
            i = sizeof(dest);
            printf("%d",i);
            
    }
    想在这个函数中用sizeof(src)求出96是不可能的。解决办法只能是给这个函数增加一个参数用一指明缓冲区的大小:
    char * my_strcpy(char *dest,const char* src,int SizeOfBuffer)
    不是有很多涉及到串操作的库函数和API函数都需要这个参数吗?
      

  8.   

    char * my_strcpy(char *dest,const char* src)
    {
            int i;
            i = sizeof(dest);
            printf("%d",i);
            
    }
    中如果dest是一个字符串指针,是可以用strlen来计算实际长度的,但是如果是一个非NULL结尾的指针,就只能将长度也传进来,否则没法知道长度。
      

  9.   


    //string functions is defined here
    #ifdef USE_STRING_INC51
        #define _far_ far
    #else
        #define _far_
    #endif
     
    unsigned char _far_ * StrCat(unsigned char _far_ * s1,unsigned char _far_ *  s2 ) 
    {
    unsigned char _far_ * ptr;
        ptr = s1;
        while ( * s1 ) s1++;                 
        while ( * s1++ = * s2++ ) ;          
        return ( ptr );                     
    }unsigned char _far_ * StrCpy(unsigned char _far_ * s1,unsigned char _far_ *  s2 )
    {
        unsigned char _far_ * ptr = s1;
        while (* s1++ = * s2++ ) ;
        return ( ptr );                     
    }int  StrCmp(unsigned char _far_ *s1,unsigned char _far_ * s2 )
    {
       for ( ; *s1 == *s2; s1++, s2++ ) 
       {
           if ( *s1 == '\0' ) return( 0 );  
       }
       return( ( int )*s1 - ( int )*s2 );   
    }int StrLen(unsigned char _far_ *s )                   
    {
        unsigned  char _far_ *ptr;
        ptr = s;
        while ( *s ) s++;
        return ( s - ptr );                
    }long StrToL(unsigned  char  _far_ *s )
    {
    unsigned char _far_ * ptr;
    long sum=0;
    int i=0,j,k=0;
    long pow=1;
    ptr=s;
    while (*(++ptr)) k++;
    ptr--;
    k++;
    while (k) 
    {
    k--;
    pow=1;
    for(j=0;j<i;j++)
    pow=pow*16;
    if (*ptr>=0x30 && *ptr<=0x39)  
     sum+= (*ptr-0x30)*pow;
    else  
    {
    if ((*ptr=='A')||(*ptr=='a'))
    {   
    sum+=10*pow;
    }
    if ((*ptr=='B')||(*ptr=='b'))
    sum+=11*pow;
    if ((*ptr=='C')||(*ptr=='c'))
      sum+=12*pow;
    if ((*ptr=='D')||(*ptr=='d'))
      sum+=13*pow;
    if ((*ptr=='E')||(*ptr=='e'))
      sum+=14*pow;
    if ((*ptr=='F')||(*ptr=='f'))
      sum+=15*pow;
    }
     ptr--;
     i++;
    }
    return sum;
    }void ItoA(long value,unsigned char _far_  p[],int l)
    {
    int i,k,j;
    long m[10],n[10];
     
    for(i=0;i<10;i++)
    p[i]='0';
    for(k=0;k<10;k++)
    {
    m[k]=0;
    n[k]=0;
    }
    if(l==16)
    {
    if(value<16)
    {
    if(value<10)
    p[0]=48+(int)value;
    else
    {
    switch(value)
    {
    case 10: p[0]='A';
    break;
    case 11: p[0]='B';
    break;
    case 12: p[0]='C';
    break;
    case 13: p[0]='D';
    break;
    case 14: p[0]='E';
    break;
    default: p[0]='F';
    }
    }
    p[1]='\0';
    }
    else
    {
    i=0,k=0;
    m[k]=value/16;
    n[k]=value%16;
    while(m[k]>16)

    k++;
    m[k]=m[k-1]/16;
    n[k]=m[k-1]%16;
    }
    k++;
    n[k]=m[k-1]%16;
    for(j=0;j<k+1;j++)

    if(n[k-j]<10)  p[j]=n[k-j]+48;
    if(n[k-j]>=10 && n[k-j]<16)  p[j]=n[k-j]+55;
    } p[j]='\0';
    }
    }
    }
      

  10.   

    StrCpy给你了,奉送StrCat,StrCmp,StrLen,StrToL,ItoA
    该把分给我吧YooY
    (www)
      

  11.   

    同意webber84(糕鱼昏) 
    增加一個參數.直接把sizeof(buffer)/sizeof(buffer[0])傳進來.
    ...
      

  12.   

    sizeof(buffer)是不可能的,
    sizeof(buffer)/sizeof(buffer[0])也是不现实的!你们可以试试看!
    凭我多年经验,不用费心思想的,一般缓冲区都要自己指定大小的,否则系统无法知道,这个就是C语言指针容易出错的原因之一!如果真的要知道那么你必须了解C语言如何分配内存的,然后根据它实现的特点去读取长度!
      

  13.   

    看来是所问非所答 YooY
    不过没什么,大家研究研究也好"...一般缓冲区都要自己指定大小的,否则系统无法知道,这个就是C语言指针容易出错的原因之一!“
    这可是真的哦!
      

  14.   

    windows 内存管理+资源分配+进程管理 这些都难啊,
    那位有这三方面的资料介绍点,我也想了解了解!