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;
}

...全文
165 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
  • 打赏
  • 举报
回复
帮你顶下。。。
没看懂。。。
已经博主授权,源码转载自 https://pan.quark.cn/s/a4b39357ea24 1. 介绍:CNote 致力于打造最易懂的 C 语言入门教程, 2. PDF本 : CNote PDF 本下载 提取码:dmqx 3. 视频教程 : CNote 配套视频保姆级视频教程共计 170 节,学不会,算我输。 4. 转载须知 :以下所有文章与视频教程皆为我的原创,转载请联系我们,如发现恶意抄袭/搬运,会动用法律武器维护自己的权益,让我们一起维护一个良好的技术创作环境! 5. Star支持:CNote 开源不易,希望大家能 Satr\Fork 支持我们,你的支持就是我们持续更新的动力。 CNote 基础 基础知识点详解: 计算机常识 什么是计算机程序 ? 什么是计算机语言 ? 常见的计算机语言类型有哪些 ? 什么是C语言? C语言历史 C语言标准 C语言现状 为什么要学习C语言? 如何学好C语言 编写C语言程序用什么工具 ? Qt Creator安装 什么是环境变量? 如何创建C语言程序 C语言程序组成 函数定义格式 如何运行编写好的程序 C语言程序练习 初学者如何避免程序出现BUG 多语言对比 注释就是这么简单? 什么是关键字? 什么是标识符? 什么是数据? C语言数据类型 什么是常量? C语言变量全解? printf函数 Scanf函数 putchar和getchar C语言运算符大全解 阶段练习 入门 流程控制基本概念 选择结构 循环结构 四大跳转 循环的嵌套 图形打印 函数那点事 main函数分析 递归函数(了解) 进制基本概念 进制转换 原码反码补码 位运算符 变量内存分析 char类型内存存储细节 类型说明符详细解释 数组那点事 数组内部存储细节 数组注...

70,038

社区成员

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

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