当前位置: 首页 > 编程日记 > 正文

字符串最易犯的错误 总是和 那个\0 有关

下面程序有一处错误导致 多错误:

View Code
  1 #include <stdio.h>
  2 #include <string.h>
  3 #include <stdlib.h>
  4 #include <assert.h>
  5 typedef struct{
  6     int l, c;  // lines, cols
  7 } pos_t;
  8 
  9 typedef struct {
 10     char *str;
 11     pos_t pos;
 12     int w, h; // the width and height of a recttangle
 13     void(*set)(void *);  // the way of display
 14 } str_obj;
 15 
 16 char *buf;
 17 int L, C;
 18 
 19 void init(int line, int cols);
 20 void uninit(void);
 21 void display(void);
 22 void set_pixel(int cols, int line, char ch);
 23 static void hor_line(int c, int l, int length);
 24 static void ver_line(int c, int l, int length);
 25 void print(void *obj);
 26 
 27 int main(int argc, char **argv)
 28 {
 29 
 30     init(23, 80);
 31     
 32     str_obj xstr = {
 33        "The UNIX operating system provides its services through "
 34        "a set of system calls, which are in effect functions wit"
 35        "hin the operating system that may be called by user prog"
 36        "rams. This chapter describes how to use some of the most"
 37        " important system calls from C programs.",
 38         {2,5}, 15,20, print
 39     };
 40  
 41         xstr.set(&xstr);
 42         xstr.pos.c += xstr.w+3;
 43         xstr.set(&xstr);
 44 
 45     str_obj ystr = {
 46         "The only way to learn a new programming language is by "
 47         "writing programs in it.",
 48         {5, 50}, 20, 5, print
 49     };
 50         ystr.set(&ystr);
 51         ystr.pos.l += ystr.h+1;
 52         ystr.set(&ystr);
 53 
 54     display();
 55 
 56     uninit();
 57     return 0;
 58 }
 59 
 60 void init(int line, int cols)
 61 {
 62     if(line < 1 || cols < 1){
 63         printf("init: parameter error.");
 64         exit(1);
 65     }
 66     L = line, C = cols;
 67     buf = malloc(L*C);
 68     memset(buf, ' ', L*C);
 69 }
 70 
 71 void uninit(void)
 72 {
 73     free(buf);
 74 }
 75 void display(void)
 76 {
 77     buf[L*C] = 0;
 78     printf("%s", buf);
 79 }
 80 void set_pixel(int cols, int line, char ch)
 81 {
 82     if(line > 0 && line <= L && cols > 0 && cols <= C)
 83         buf[(line-1)*C + cols-1] = ch;
 84 }
 85 
 86 static void hor_line(int c, int l, int length)
 87 {
 88     set_pixel(c, l, '+');
 89     int i;
 90     for(i=c+1; i<length+c-1; i++)
 91         set_pixel(i, l, '-');
 92     set_pixel(i,l, '+');
 93 }
 94 
 95 static void ver_line(int c, int l, int length)
 96 {
 97     set_pixel(c, l, '+');
 98     int i;
 99     for(i=l+1; i<length+l-1; i++)
100         set_pixel(c, i, '|');
101     set_pixel(c, i, '+');
102 }
103 
104 void print(void *obj) 
105 {
106     str_obj *p = obj;
107     char *str = p->str;
108     int x = p->pos.c, y = p->pos.l;
109     int w = p->w, h = p->h;
110 
111     hor_line(x-2, y-1, w+4);
112     ver_line(x-2, y-1, h+2);
113     hor_line(x-2, y+h, w+4);
114     ver_line(x+w+1, y-1, h+2);
115 
116     int i,j;
117     int len = strlen(str), count = 0;
118     for(i=0; i<h; i++){ 
119         for(j=0; j<w; j++){
120                 if(count < len ){
121                     set_pixel(j+x,y+i, str[count++]);
122                 }
123         }
124     }
125 }

给字符串指针分配 堆空间时一定要 记得 算上后面的\0;

这么晚了,算是教训,睡觉;

转载于:https://www.cnblogs.com/mathzzz/archive/2012/07/16/2592919.html

相关文章:

12月3号条件控制语句和循环语句

if条件语句 非零即真 0即假 if&#xff08;表达式&#xff09;{ //成立之后要处理的事情 } 以atm小程序为例 //判断用户选择的操作 if &#xff08;operation 1&#xff09;{ //输入密码 printf("输入密码\n"); } if (operation 2){ //取款 printf("取款\n…

获取交换机OID值

附&#xff1a;之前的文章直接给出交换机cpu和内存的OID&#xff0c;下面我叙述下怎么具体去获得OID。下面以H3C内存及cpu部分OID值&#xff1a;&#xff08;可打400电话询问部分值&#xff09;400电话告诉我以下&#xff08;当然万能的网友也行了&#xff09;&#xff0c;缺少…

矩阵变化和坐标

原文地址&#xff1a;http://www.cnblogs.com/winter-cn/archive/2010/12/29/1919266.htmlhttp://www.useragentman.com/blog/2011/01/07/css3-matrix-transform-for-the-mathematically-challenged/在开始之前&#xff0c;首先来复习下一个简单的线性代数知识&#xff1a;矩阵…

Eclipse+SVN搭建开发环境

目前我们开发环境为&#xff1a;windows service 2008 r2 x64 现在开始记录一下eclipseSVN环境搭建过程&#xff1a; 1&#xff0c;&#xff09;下载 VisualSVN-Server-3.4.2-x64:https://www.visualsvn.com/server/download/ 2,)下载与安装&#xff1a;tortoisesvnhttp://tort…

牛客网练习赛44-B(快速幂+模拟)

题目链接&#xff1a;https://ac.nowcoder.com/acm/contest/548/B 题意&#xff1a;计算m/n小数点后k1位到k2位&#xff0c;1≤m≤n≤109&#xff0c;1<k1<k2<109,0<k2-k1<105,T<20。 思路&#xff1a;计算小数可以模拟除法一位一位地算&#xff0c;但需要把…

古剑奇谭网络版服务器位置,《古剑奇谭网络版》服务器数据互通调研公告

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼各位仙家弟子&#xff1a;为了给大家提供更好的游戏环境、形成更加稳定的游戏生态&#xff0c;小龙人计划在春节前&#xff0c;在充分参考服务器具体情况、充分尊重大家意愿的基础上&#xff0c;对部分服务器开启数据互通&#xff…

git克隆 不带目录_Git 系统学习笔记

公众号内发送Git获取Git官方PDF教程版本控制 版本控制是一种记录一个或若干个文件内容变化、以便将来查阅特定版本修订情况的系统。本地版本控制系统很久以前就开发了许多本地版本控制系统、大多都是采用某种简单的数据库来记录文件的历次更新差异。其中最流行的一种叫做 RCS、…

Android库so文件及skia函数的调用

为了实现android的二次开发&#xff0c;希望通过编制动态链接库&#xff08;.so&#xff09;的方式实现android native C程序的调用。更为实际的情况则是&#xff1a;编制新库&#xff08;new.so&#xff09;调用android的老库&#xff08;如libskia.so libskiagl.so&#xff0…

关于参数类型的转换问题

有时候遇见方法之间的参数会有冲突&#xff0c;这个时候又不想修改方法的时候&#xff0c;可以考虑一些类型转换的一些技巧&#xff0c;如.toString( ) .toDate( ) .parseInt( ) .valueOf( )等等 转载于:https://www.cnblogs.com/2027437606qq/p/5018710.html

c++框架有哪些_Java Mybatis框架入门教程_v20200726

MyBatis 的前身是 Apache 的开源项目 iBatis。MyBatis 几乎可以代替 JDBC&#xff0c;是一个支持普通 SQL 查询&#xff0c;存储过程和高级映射的基于 Java 的优秀持久层框架。MyBatis 与 JDBC 相比&#xff0c;减少了 50% 以上的代码量。并且满足高并发和高响应的要求&#xf…

logstash写入到kafka和从kafka读取日志

收集nginx日志放到kafka 修改nginx日志格式&#xff1a;[nginx日志格式修改](https://blog.51cto.com/9025736/2373483) input {file {type > "nginx-access"path > "/data/wwwlogs/access_nginx.log"start_position > "beginning"code…

Linux cp命令如何拷贝整个目录下所有文件

复制不包含隐藏文件&#xff1a; cp -R /home/usera/* /mnt/temp 复制包含隐藏文件 &#xff1a; cp -R /home/usera/. /mnt/temp 转载于:https://www.cnblogs.com/appinn/p/5019533.html

Windows Phone开发(7):当好总舵主 转:http://blog.csdn.net/tcjiaan/article/details/7281421...

吹完了页面有关的话题&#xff0c;今天我们来聊一下页面之间是如何导航的&#xff0c;在更多情况下&#xff0c;我们的应用程序不会只有一个页面的&#xff0c;应该会有N个&#xff0c;就像我们做桌面应 用开发那样&#xff0c;我们一个应用程序中可能不止一个窗体&#xff08;…

POJ 1966 Cable TV Network【无向图点连通度 最小割 E-K算法求最大流】

题目描述&#xff1a; 给你一个无向图&#xff0c;问你最少删掉几个点&#xff0c;使这个图成不连通。 解题报告&#xff1a; 概念 (1)一个具有 N 个顶点的图&#xff0c;在去掉任意 k-1 个顶点后 (1<K<N) 所得的子图仍连通&#xff0c; 而去掉 K 个顶点后的图不连通则称…

C++ STL:stack和queue

http://blog.csdn.net/wallwind/article/details/6858634 http://blog.csdn.net/chao_xun/article/details/8037420 http://blog.163.com/jackie_howe/blog/static/19949134720111144714342/ 1、stackstack 模板类的定义在<stack>头文件中。stack 模板类需要两个模板参数…

Day03 - Ruby比一比:Module的include与extend

前情提要在第一天里&#xff0c;我们很激昂地用Ruby的类别、物件、方法&#xff0c;写了开赛宣言&#xff01;在第二天里&#xff0c;我们比较了方法与模块&#xff0c;比的过程中&#xff0c;发现模块多了包含&#xff08;inclusion&#xff09;与延伸&#xff08;extension&a…

5 zabbix 添加host_运维监控实战篇,zabbix自动发现和自动注册图文详解

一、介绍自动发现Zabbix自动发现就是为了解决批量监控而设计的功能之一&#xff0c;什么是自动发现呢&#xff0c;简单来说就是Zabbix Server端可以基于设定的规则&#xff0c;自动批量的去发现局域网若干服务器&#xff0c;并自动把服务器添加至Zabbix监控平台&#xff0c;省去…

PHP面向对象编程(imooc)代码合集(四)

class10 多态 多态简单说就是用不同的类去实现同一个接口的方法&#xff0c;以实现不同类自己的方法 <?php date_default_timezone_set("PRC"); /*** 多态* 1. 只要某个对象实现了接口&#xff08;instanceof&#xff09;&#xff0c;就可以直接在对象上调用接口…

云解析DNS产品优势与应用场景

什么是阿里云解析&#xff1a;阿里云解析是面向全网域名开放的域名智能解析服务。阿里云解析做为云计算服务的入口&#xff0c;将逐步与阿里云已有云产品融合打通&#xff0c;成为云产品大家庭中不可或缺的一份子。ECS、RDS、CDN、SLB 等产品为用户提供高效可靠的计算、存储、网…

字节跳动 录屏功能_一周盘点:Instagram打通视频购物功能 公开叫板TikTok;字节跳动要大力布局跨境出口电商?...

周末刚结束&#xff0c;预祝各位小伙伴们在接下来的每一天都能大卖&#xff01;大师兄先带你盘点这一周都有哪一些跨境电商热点事件&#xff1a;每周要点Instagram打通视频购物功能 公开叫板TikTok据外媒报道&#xff0c;Instagram于美国当地时间12月10日宣布&#xff0c;将把应…

postgresql scws zhparser安装

2019独角兽企业重金招聘Python工程师标准>>> 基于postgresql9.6 scws 1.23 postgresql9.6安装参看本博客相关教程 zhparser安装 1、export PATH"$PATH:/usr/pgsql-9.6/bin" 2、SCWS_HOME/usr/local make && make install 转载于:https://my.oschi…

Spring3.3 整合 Hibernate3、MyBatis3.2 配置多数据源/动态切换数据源 方法

原文地址:http://www.cnblogs.com/hoojo/p/Spring_Hibernate_MyBatis_MultipleDataSource_switchDataSource.html#2836713 转载于:https://www.cnblogs.com/longshiyVip/p/5024040.html

graphpad做折线图后怎么保存_农村的干豆角怎么做的?农村妹子教你两个窍门,保存2年都不会坏...

农村经常制作的干豆角怎么做的&#xff1f;农村妹子教你两个窍门&#xff0c;保存到冬天炖肉吃夏季&#xff0c;这个时节正是豆角生长最旺盛的时候&#xff0c;在农村&#xff0c;只要种一小块地的豆角&#xff0c;都是吃不完的&#xff0c;如果不摘下来&#xff0c;就只能看着…

PCL—低层次视觉—点云分割(基于凹凸性)

1.图像分割的两条思路 场景分割时机器视觉中的重要任务&#xff0c;尤其对家庭机器人而言&#xff0c;优秀的场景分割算法是实现复杂功能的基础。但是大家搞了几十年也还没搞定——不是我说的&#xff0c;是接下来要介绍的这篇论文说的。图像分割的搞法大概有两种&#xff1a;剑…

wireshark-wincap安装问题

winpcap关键模块 32位系统&#xff1a; C:\Windows\system32\wpcap.dll C:\Windows\system32\Packet.dll C:\Windows\system32\WanPacket.dll C:\Windows\system32\pthreadVC.dll C:\Windows\system32\drivers\npf.sys 64位系统&#xff1a; C:\Windows\SysWOW64\wpcap.dll C:\…

liunx学习笔记(一:常用命令)

linux:在学习linux之前我们应该多少了解windows的一些相关操作&#xff0c;linux也就是类似windows的另一种操作系统&#xff0c;用来管理软硬件的一种应用。在windows下你可以通过鼠标点击相关的图标进行对应的操作&#xff0c;而在Linux中却是需要使用者输入一行行的命令&…

aspose.cells 无法读取公式值_隐藏 Excel表格、公式的9种方法

Excel&#xff0c;站在你面前&#xff0c;你却看不见.....1、给Excel文件穿上隐身衣在win10系统中&#xff0c;隐藏文件变得如此容易&#xff0c;选取文件点“隐藏所选项目”&#xff0c;再去掉“隐藏的项目”勾选 "&#xff08;想彻底隐藏需要修改注册表&#xff0c;新手…

12-09关于几种排序方式

一.选择排序 #include <stdio.h> //选择排序 //记录最小的那个数的索引值 //下面这个循环就是去寻找最小的那个数的index //有比k对应的值更小的 //判断是否需要交换 //k和i对应的值交换 void selectsort(int array[],int counttimes){ int k 0; for (int i 0; i < …

Redis事务介绍

概述 相信学过Mysql等其他数据库的同学对事务这个词都不陌生&#xff0c;事务表示的是一组动作&#xff0c;这组动作要么全部执行&#xff0c;要么全部不执行。为什么会有这样的需求呢&#xff1f;看看下面的场景&#xff1a; 微博是一个弱关系型社交网络&#xff0c;用户之间有…

那些按烂的Linux命令集合贴

#查看80端口运行情况netstat -anp|grep 80 #关闭某个进程(如8848pid) kill -9 8848 #运行java的war包 java -jar myproj.war #持续后台运行java项目 nohup java -jar myproj.war > log.file 2>&1 & #重启计算机(服务器)不推荐使用,并不是平滑地关闭程序应用,推荐…