C语言入门经典(第4版)BUG

rmm0001 2011-10-17 06:21:25
想输出5个消息,每条消息的长度最大为5;
可是一直只能输入最大3个长度的消息,而且超过的字符串回流到下一次输出,如果输入4个字符串,就直接输出一行消息,其他消失是空的。
欢迎高手看一下,给分。



#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>

int main(void) {

//输入字符串的最大长度
const size_t BUFFER_LEN= 5;
//输入字符串的行数
const size_t NUM_P= 5;
//字符串数组

//字符串指针
char *pS [100] = { NULL };
//指针指向字符串数组

int i=0;
//你可以输入多少条消息,每条消息多少个字符
printf("\n You can enter up to %u messages each up to %u characters.",
NUM_P,BUFFER_LEN-1);
//在for循环中处理输入的字符
for(i=0;i<NUM_P;i++){
char buffer[BUFFER_LEN];
char *pbuffer=buffer;
//初始化数组指针
pbuffer=buffer;
//第一次是a,以后每次another
printf("\nEnter %s message,or press Enter to end\n",i>0?"another":"a");
//数组指针的偏移量小于数组长度大小减一,并输入的字符不能是'\n'
while((pbuffer-buffer<BUFFER_LEN-1)){
// int i=pbuffer-buffer;
if((*pbuffer++=getchar())!='\n'){
// if((*pbuffer=getchar())!='\n'){
// *pbuffer++;
}else
break;
}
//空行跳过
if((pbuffer-buffer)<2)
break;
//最后一个字符不是'\n',输出字符串太长了,只允许最大BUFFER_LEN长度
if((pbuffer-buffer)==BUFFER_LEN && *(pbuffer)!='\n'){
printf("String too long - maximum %d characters allowed.",BUFFER_LEN);
i--;
continue;
}
//用结束位替代最后一个字符
*(pbuffer)='\0';
//给pS[i]分配空间
pS[i] = (char*)malloc(pbuffer-buffer);
//如果指针ps[i]为NULL,说明内存溢出
if(pS[i]==NULL){
printf("\nOut of memory - ending program");
return 1;
}
//把ps[i]指针指向buffer的值。
strcpy(pS[i],buffer);
}
printf("\nIn reverse order, the strings you entered are:\n");
//循环打印ps[i]
while(--i>=0){
printf("\n%s",pS[i]);
free(pS[i]);
pS[i]=NULL;
}
return 0;
}

...全文
134 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
rmm0001 2011-10-18
  • 打赏
  • 举报
回复
谢了![Quote=引用 1 楼 jackfuloo 的回复:]

帮你顶下。。。
没看懂。。。
[/Quote]
rmm0001 2011-10-18
  • 打赏
  • 举报
回复
呵呵,没人回复啊!
rmm0001 2011-10-18
  • 打赏
  • 举报
回复
if((pbuffer-buffer)<2)
break;
这边的break改continue 就可以了,而且发现打印输入超过最大值的buffer是把超出前面的部分截取掉了,剩下后面输入的,不知道原因,有谁知道的。
luciferisnotsatan 2011-10-18
  • 打赏
  • 举报
回复
单步调试下
liujun3512159 2011-10-18
  • 打赏
  • 举报
回复
帮忙顶下啦
jackfuloo 2011-10-17
  • 打赏
  • 举报
回复
帮你顶下。。。
没看懂。。。

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧