• 指针数组


    
    
    //干净版本正确版本
    #include <stdio.h> const size_t BUFFER_LEN = 512; int main (void) { char buffer[512]; char *pS[3] = { NULL }; char *pbuffer = buffer; size_t index =0; int i= 0 ; printf(" Enter 3 messages that total less than %u characters.", BUFFER_LEN-2); for( i= 0 ; i<3; i++) { printf(" Enter %s message ",i>0?"another":"a"); pS[i]= &buffer[index]; for(; index<BUFFER_LEN; index++) if((*(pbuffer+index) = getchar())==' ') { *(pbuffer+index++)=''; break; } if((index==BUFFER_LEN)&&((*(pbuffer+index-1)!='')||(i<2))) { printf(" You ran out of space in the buffer."); return 1; } } printf(" The strings you entered are: "); for( i = 0 ; i<3; i++) printf("%s ",pS[i]); printf("The buffer has %d characters unused.", BUFFER_LEN-index); return 0; }
    
    
    
     

     为啥老是输出空指针,

    http://blog.csdn.net/phunxm/article/details/5081159

    //这个例子也不对
    #include <stdio.h> const size_t BU=512;//指定数组的大小 char buffer[512];//数组 char *pS[3]={NULL};//定义了一个指针数组,包含三个空指针 char *pbuffer =buffer;//数组buffer指向了一个指针pbuffer,pbuffer用了buffer数组中的第一个字节初始化 size_t index =0;//用于遍历 int j; int main (void) { int i; printf(" Enter 3 messages that total less than %u characters",BU-2); for (i=0;i<3;i++) { printf(" Enter %s message ",i>0?"anther":"a"); pS[i]=&buffer[index];//用指针数组某个指针i储存buffer中的地址 for (index=0;index<BU;index++) { if((*(pbuffer+index)=getchar())==' ') { *(pbuffer+index++)='';//index 先自加,再运算index=0读取第一个*(pbuffer+0),第index个 break;//接受下一句话 //*(pbuffer+index+1) } if((index==BU)&&(*(pbuffer+index-1)!='')) { printf(" You ran out of space in the buffer"); return 1; } } } printf(" The.........are: "); for (j=0;j<3;j++) printf("%s ",*(pS[j])); printf(" %d,used ",BU-index); system("pause"); return 0; }
    //改正!!!!!!!!!!!!!!!!!!!!
    
    
    
    
    #include <stdio.h>
    const size_t BUFFER_LEN=512;
    
    int main (void)
    {
     
     
        char buffer[512];
        char *pS[3]={NULL};
        char *pbuffer =buffer;
        size_t index =0;
        int i=0;
        
        printf("
    Enter 3 messages that total less than %u characters",BUFFER_LEN-2);
        
        for (i=0;i<3;i++)
        {
            printf("
    Enter %s message 
    ",i>0?"anther":"a");
            
            pS[i]=&buffer[index];
            
            for (;index<BUFFER_LEN;index++)//之前 自作主张写成(index=0;index<BUFFER_LEN;index++)大错!!!
                if((*(pbuffer+index)=getchar())=='
    ')    
            {
                *(pbuffer+index++)='';
                break;
            }
            if((index==BUFFER_LEN)&&((*(pbuffer+index-1)!='')||(i<2)))//之前忘了加||(i<2) 了
                {
                printf("
     You ran out of space in the buffer");
                return 1;
                }
        }    
            printf("
     The.........are:
    ");
            for (i=0;i<3;i++)
                printf("%s
    ",pS[i]);//(听信傻逼改的书上例子*(pS[i]),后来写成(pS[i]) 多加了个括号,也不对)
            
            
        printf("
    %d,used
    ",BUFFER_LEN-index);
        system("pause");//在这个例子中可有可无
        return 0;     
    
    }

    教训,1:用谷歌,坚决不用百度2,抄写有错误时候,先检查清楚有没有抄错,一点不同就可能错,C语言一点也不能含糊,多加个啥都错3看不懂时候要一步一步写好注释,只有这样才容易理解,还有学会使用搜索引擎,可以先整体搜索,然后再细化

    #include <stdio.h>
    const size_t BUFFER_LEN=10;
    
    int main (void)
    {
     
     
        char buffer[10];
        char *pS[3]={NULL};
        char *pbuffer =buffer;
        size_t index =0;
        int i=0;
        
        printf("
    Enter 3 messages that total less than %u characters",BUFFER_LEN-2);
        
        for (i=0;i<3;i++)
        {
            printf("
    Enter %s message 
    ",i>0?"anther":"a");
            
            pS[i]=&buffer[index];//把的buffer[0]地址给指针ps[0]
            
            for (;index<BUFFER_LEN;index++)//之前 自作主张写成(index=0;index<BUFFER_LEN;index++)大错!!!
                if((*(pbuffer+index)=getchar())=='
    ') 
    
    
                    /* 
                    
                    *(pbuffer+0)    index =0          first
                    *(pbuffer+1)    index =1        second        
                    ...
                    *(pbuffer+index)=='
    '                  di  index+1 ge   
                    
                假如index==5 ,现在(包括'
    ')输入了6个字符,
                    
                    for(....)
                    {
                        if(..)
                        {
                        等价    
                        for范围是第一个if    
                        }
                        
                    }
                    
                    
                    */  
            {
                *(pbuffer+index++)=''; 
                /*在'
    '后面+上''//当然也可以*(pbuffer+index)=''替换'
    '
                
                *(pbuffer+6)=''
                
                
                */
                break;
            }
            //index自加   index==6
            
            if((index==BUFFER_LEN)&&((*(pbuffer+index-1)!='')||(i<2))) //pbuffer+index  
                {
                printf("
     You ran out of space in the buffer");
                return 1;
                }
                
                
        }    
            printf("
     The.........are:
    ");
            for (i=0;i<3;i++)
                printf("%s
    ",pS[i]);//%s格式符表示输出的是字符串,后面对应的参数用字符数组或是字符指针。这里正是字符指针
            
            //(听信傻逼改的书上例子*(pS[i]),后来写成(pS[i]) 多加了个括号,也不对)
            
            
        printf("
    %d,shengyu
    ",BUFFER_LEN-index);//总的-用掉的空间=剩下的
        system("pause");//在这个例子中可有可无
        return 0;     
    
    }
  • 相关阅读:
    APP-SQLAP-10771:Could not reserve record (匹配PO时候)
    EBS常用小常识(转)
    ajax-工作原理,包含技术,缺陷
    js实现“级联菜单”
    考证
    十八大以来习主席同志关于经济工作的重要论述
    局域网使用打印机的快捷方法
    修改JRE system library
    十步完全理解SQL
    2013读书笔记
  • 原文地址:https://www.cnblogs.com/xinqidian/p/5583662.html
Copyright © 2020-2023  润新知