| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 578 人关注过本帖
标题:求助各位高手,关于指针控制字符串的一道题
只看楼主 加入收藏
xiaoliang_sh
Rank: 2
等 级:论坛游民
帖 子:18
专家分:11
注 册:2010-7-16
结帖率:66.67%
收藏
已结贴  问题点数:20 回复次数:6 
求助各位高手,关于指针控制字符串的一道题
#include<stdio.h>
#include<stdlib.h>
const size_t BUFFER_LEN =10;
int main(void)
{
    char buffer[BUFFER_LEN];
    char *pS[3]={NULL};
    char *pbuffer =buffer;
    size_t index=0;
    printf("\nEnter 3 message that total less than %u characters.",BUFFER_LEN-3);
    for(int i=0;i<3;i++)
    {
            printf("Enter %s message\n",i>0? "another":"a");
            pS[i]=&buffer[index];
            for(;index<BUFFER_LEN;index++)
                if((*(pbuffer+index)=getchar())=='\n')
                {
                     *(pbuffer+index++)='\0';
                     break;                              
                }
            if((index==BUFFER_LEN)&&((*(pbuffer+index-1)!='\0')||(i<2)))
            {
               printf("\nYou ran out of space in the buffer.");
               system("pause");
               return 1;                                                         
            }
    }
    printf("\nThe strings you entered are :\n\n");
    for(int i=0;i<3;i++)
    printf("%s\n",pS[i]);
    printf("The buffer has %d characters unused.\n",BUFFER_LEN-index);
        system("pause");
        return 0;

}


问题一:当输入“111111111”回车,显示空间不足,与 if((index==BUFFER_LEN)&&((*(pbuffer+index-1)!='\0')||(i<2)))貌似不符。
问题二:if((index==BUFFER_LEN)&&((*(pbuffer+index-1)!='\0')||(i<2))) 中i<2加不加是不是无所谓的
搜索更多相关主题的帖子: 字符 指针 
2010-07-18 21:19
heartnheart
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
帖 子:335
专家分:1096
注 册:2009-7-10
收藏
得分:0 
问题1:输入九个1后,循环结束后,index==10 pbuffer+index-1 = (pbuffer+10-1) = 9 而*(pbuffer+9) == pbuffer[9]==‘1’所以满足判断的条件
问题2:显然不是无所谓的╮(╯_╰)╭。这个总的判断是要确定是否用完空间,前半部分判断index是否指向最后,然而指向最后也不一定是满了,在i = 3的时候要判断最后一个字符是不是'\0',而在i<2的时候,不管你最后一个字符是不是\0,你还要输入,这样还会向数组中添加至少一个'\0',总是会越界的,所以i<2不能丢
2010-07-18 22:17
xiaoliang_sh
Rank: 2
等 级:论坛游民
帖 子:18
专家分:11
注 册:2010-7-16
收藏
得分:0 
谢谢楼上的回复。我觉得,对于问题一,pbuffer[9]=='\0',pbuffer[0]到pbuffer[8]是九个1,我后来看了下问题出在(*(pbuffer+index-1)!='\0')||(i<2))这句,只要在第三次输入之前正好用完空间就会出现You ran out of space in the buffer.
第二个问题,我想问题解决只要把i<2去掉,不知道我说得对不对。因为这个是造成第一个问题的原因。

对于楼上的回答‘指向最后也不一定是满了’这个我不理解,还有在第三次之前指向最后的话就没有继续输入的权利了,会直接跳过输入的那个循环。我也不知道我理解对不对,希望能继续交流
2010-07-19 00:37
heartnheart
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
帖 子:335
专家分:1096
注 册:2009-7-10
收藏
得分:20 
我看错了,问题一确实是pbuffer[9] = \0……
只要在第三次输入之前正好用完空间就会出现You ran out of space in the buffer.
我觉得这个是合理的,因为程序要求输入3个字符串,第三个字符串即使你只输入回车符也是会保存一个\0到数组里吧,这样不就越界了

第二个问题把i<2去掉虽然解决了你的问题一,但是这样不就不符合程序要求了吗?你最多输入7个字符,而BUFFER_LEN =10的原因就是为了保留3个\0
2010-07-19 09:43
xiaoliang_sh
Rank: 2
等 级:论坛游民
帖 子:18
专家分:11
注 册:2010-7-16
收藏
得分:0 
有道理的,谢谢了
2010-07-19 13:30
快速回复:求助各位高手,关于指针控制字符串的一道题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.011947 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved