![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
c/c++
文章平均质量分 62
乌托
这个作者很懒,什么都没留下…
展开
-
getchar()、EOF和Ctrl+Z
当初学c语言的时候,都知道EOF是文件结束符,end of file的意思,一般通过EOF来标识输入或文件的结束(终端输入的话windows系统中是Ctrl+Z键,linux系统是Ctrl+D键),如上面那段代码所示,以前一直以为是不断读入终端输入的字符,一直到读到^Z为止,但现在发现却不是这么简单。一个小例子#include #include int main(){原创 2017-12-14 22:38:50 · 2691 阅读 · 2 评论 -
c/c++中的inf与nan
inf :infinity (linux) 等同于 #INF:infinity (windows) nan :not a number 等同于 #IND:indeterminate (windows) 注意:inf一般是因为得到的数值,超出浮点数的表示范围(溢出,即阶码部分超过其能表示的最大值);而nan一般是因为对浮点数进行了未定义的操作,如对-1开方。 nan==nan 结果是0或f转载 2018-01-23 19:01:21 · 40503 阅读 · 0 评论 -
C++ 标准模板库STL中vector用法介绍
本文所介绍的std::vector用法基于C++11,std::vector定义于头文件<vector>中,其定义如下:template< class T, class Allocator = std::allocator<T>> class vector;其包含成员类型其成员函数如下:成员类型成员类型定义value_typeTallocato...原创 2018-02-09 20:49:00 · 981 阅读 · 0 评论 -
C++ 标准模板库STL中set用法介绍
本文所介绍的std::set用法基于C++11,std::set定义于头文件<set>中,其定义如下:template< class Key, class Compare = std::less<Key>, class Allocator = std::allocator<Key>> class set;std::set 是...原创 2018-02-09 21:02:11 · 1675 阅读 · 0 评论 -
C++ 标准模板库STL中map用法介绍
本文所介绍的std::map用法基于C++11,std::map定义于头文件<map>中,其定义如下:template< class Key, class T, class Compare = std::less<Key>, class Allocator = std::allocator<std::pair<const K...原创 2018-02-12 17:10:25 · 3613 阅读 · 0 评论 -
动态规划解二维多重背包问题
背包问题背包问题是一个很经典的算法问题,根据其复杂程度不同又可分为01背包问题、完全背包问题、多重背包问题、二维背包问题等等。本文讲一讲二维多重背包问题的动态规划解法。01背包问题有N件物品和一个容量为V的背包。第i件物品的体积是a[i],价值是w[i]。求解将哪些物品装入背包可使价值总和最大完全背包问题有N种物品和一个容量为V的背包,每种物品都有无限件可用。第i种物品...原创 2018-03-13 22:36:45 · 13893 阅读 · 2 评论 -
"error while loading shared libraries: xxx.so.x" 错误的原因和解决办法
一般我们在Linux下执行某些外部程序的时候可能会提示找不到共享库的错误, 比如:tmux: error while loading shared libraries: libevent-1.4.so.2: cannot open shared object file: No such file or directory原因一般有两个, 一个是操作系统里确实没有包含该共享库(lib*.so.*文件)转载 2018-04-30 13:47:06 · 762 阅读 · 0 评论 -
C语言字符串与C++string对象的相互转换
C语言中字符串以字符数组的形式存储,以’\0’结尾,而C++中引入了string类作为字符串类型,它们之间可以通过以下方法相互转换:C语言字符串=>C++string对象C++中,string类能够自动将C 语言字符串转换成string对象#include <iostream>#include <string>int main(){ const char *s = "Roger!";原创 2018-04-23 20:51:28 · 12101 阅读 · 0 评论 -
C/C++ 可变参数宏与__VA_ARGS__ 宏
在GNU C中,从C99开始,宏可以接受可变数目的参数,就象可变参数函数一样。和函数一样,宏也用三个点…来表示可变参数__VA_ARGS__ 宏__VA_ARGS__ 宏用来表示可变参数的内容,简单来说就是将左边宏中 … 的内容原样抄写在右边__VA_ARGS__ 所在的位置。如下例代码:#include <stdio.h>#define debug(...) printf(__VA_ARGS_原创 2018-05-02 19:29:39 · 23728 阅读 · 1 评论 -
cout 输出 uint8_t 整形值
在C++中我们一般用std::cout输出到屏幕,但如果直接用cout输出uint8_t类型的无符号整形数的话却不能得到我们想到的整形值,比如下例代码:#include <iostream>#include <stdint.h>int main(){ uint8_t a = 98; std::cout << a << std::endl; return 0;}我们希望输原创 2018-04-25 19:33:56 · 13584 阅读 · 0 评论 -
C/C++ 中利用debug宏定义打开/关闭调试输出
debug宏作为调试开关在写程序时,为了调试,经常需要加一些输出语句,等调试完成又得注释掉,如果下次还需要调试还得解注释,十分费时费力,为了解决这个麻烦,可以定义一个debug宏作为调试输出的开关。如下面代码所示:#include <stdio.h>int main(void){ int i, sum; for (i = 1, sum = 0; i <= 5; i++) {原创 2018-05-06 20:26:00 · 23596 阅读 · 3 评论 -
C/C++可变参数函数
可变参数的函数,即函数的参数个数和参数类型不完全确定的函数。这类函数最常见的就是printf、scanf函数。在C/C++中,为了通知编译器函数有可变参数,必须以三个点结束该函数的声明。例如://printf函数的声明 int printf(const char * _Format, ...); //scanf函数声明 int scanf(const char * _Format, ...原创 2018-04-28 19:17:46 · 1202 阅读 · 0 评论 -
c语言转义字符
今天遇到一道题: 有以下程序: void main(){ char a, b, c, *p; a=’\’; b=’\xbc’; c=’\0xab’; p=”\0127”; printf(“%c %c %c %c\n”, a, b, c, *p); } 编译时出现错误,以下叙述中正确的是() A. 程序中只有a=’\’;语句不正确原创 2017-12-11 22:07:48 · 29899 阅读 · 2 评论 -
Linux 下修改socket接收缓冲区
在进行socket编程有时候可能需要修改下socket的接收缓冲区大小,这里可以使用 setsockopt 函数,但是如果需要修改的缓冲区很大(比如500MB),则还需要修改系统内核的TCP/IP参数,不然接收缓冲区大小会收到内核参数的限制,所以需要改两个地方。下面以把socket接收缓冲区修改为500MB说明一下要作的修改。1、修改内核TCP/IP参数在终端用sysctl命令修改socket最大缓原创 2017-10-19 19:16:58 · 10019 阅读 · 1 评论 -
C++标准转换运算符const_cast
C++提供了四个转换运算符以供显式类型转换,分别是:static_cast < new_type> (expression)dynamic_cast < new_type> (expression)const_cast < new_type> (expression)reinterpret_cast < new_type> (expression)其中const_cast是用来改变运算对象原创 2017-07-27 22:51:56 · 760 阅读 · 0 评论 -
sizeof(数组名)和sizeof(指针)的区别
在c/c++中我们一般都用 sizeof(数组名)/sizeof(数组元素类型) 来计算数组的长度,其中 sizeof(数组名) 计算的是数组占用的存储大小。同时,一般我们认为数组名和指针就是一回事,最近写程序时将数组名作为指针形参传入函数,想在函数中用 sizeof(指针形参)/sizeof(数组元素类型) 来计算数组长度时却出了错,最后发现原来是sizeof(数组名)和sizeof(指针)的区别原创 2017-07-22 14:09:03 · 12489 阅读 · 3 评论 -
C/C++常用头文件及函数汇总
写代码时经常忘记有些用到的函数是要包含哪些头文件,在这里整理一下,方便以后查阅(持续更新中…)C 头文件 说明 stdio.h 定义输入/输出函数,如printf,scanf,getchar等 stdlib.h 定义杂项函数及内存分配函数,如malloc等 stddef.h 常用常量,如NULL,size_t等 stdint.h原创 2017-08-01 09:19:41 · 9196 阅读 · 1 评论 -
cout格式化输出
在C语言中,我们一般用printf()函数来进行输出,通过输出字符串中的格式说明符(如%4.2d)可以很容易地格式化输出。而在C++中,为简便起见,往往不指定输出的格式,由系统根据数据的类型采取默认的格式,但有时也需要数据按我们指定的格式输出,比如以十六进制的形式输出一个整数等。有两种方法可以达到格式化输出的目的,一种是使用流对象的有关成员函数,还有一种是使用控制符方法,这两种方法殊途同归,它们的原原创 2017-09-03 19:12:16 · 9743 阅读 · 3 评论 -
C/C++中的预定义宏
C/C++中有一些预定义宏经常会被用到,在此归纳整理一下。 一般最常用到的是一些标准预定义宏,见下表: 标准预定义宏 内容 __FILE__ 代表当前源代码文件名的字符串文字(包含了详细路径,如”G:/program/study/c++/main.cpp”) __LINE__ 代表当前源代码中的行号的整数常量 __DATE__ 进行预处理的日期(”Mmm dd yyy原创 2017-08-27 16:09:52 · 767 阅读 · 0 评论 -
使用gcc在命令行中预定义宏
例子#include <stdio.h>int main (void){ int i, sum; for (i = 1, sum = 0; i <= 10; i++) { sum += i; #ifdef DEBUG printf ("sum += %d is %d\n", i, sum); #endif ...原创 2017-08-27 16:59:15 · 4354 阅读 · 0 评论 -
Pthreads 多线程入门教程
Pthreads 是 IEEE(电子和电气工程师协会)委员会开发的一组线程接口,负责指定便携式操作系统接口(POSIX). Pthreads 中的 P 表示 POSIX,实际上,Pthreads 有时候也代表 POSIX 线程.前言本文档参考: https://computing.llnl.gov/tutorials/pthreads/POSIX 委员会定义了一系列基本功能和数据结构,希望能够被大量转载 2017-09-14 21:33:44 · 1023 阅读 · 0 评论 -
eclipse 生成及使用C/C++静态库
生成静态库要在eclipse中生成一个静态库,需要先创建一个静态库项目,依次选择 File -> New -> C Project (或C++ Project),并在创建项目对话栏中选择 Static Library,如下图所示。创建静态库项目后,将源代码拷贝至项目文件夹下,刷新后直接build即可,在Debug文件夹下可以找到生成的静态库文件,如下图所示,libtestlib.a就是我们需要的静态原创 2017-09-08 22:48:52 · 8558 阅读 · 0 评论 -
C/C++中的NULL与nullptr
C中的NULL在C语言中我们将NULL用作空指针之用,NULL在C语言中的定义如下:#define NULL ((void *)0)可以看到,C语言中NULL是一个void*指针,我们常用其来对指针变量进行初始化赋值或者作为返回类型为指针的函数的返回值(如函数执行失败时)等等。C++中的NULL在C++中,NULL的定义如下:/* Define NULL pointer value */#i原创 2017-09-09 15:23:40 · 5837 阅读 · 0 评论 -
printf()输出格式
int printf ( const char * format, … )将格式化的数据打印到标准输出printf()函数将上述函数定义中format指向的C字符串写到标准输出。如果format中包含了格式说明符(以%开头的子序列),则format之后的附加参数将被格式化并插入到字符串中代替对应的说明符。参数1. format包含了要写入标准输出的文本的C字符串它可以可选地包含一些格式说明符翻译 2017-09-02 23:25:55 · 13541 阅读 · 0 评论 -
malloc, calloc, realloc 使用及区别
堆空间malloc, calloc, realloc 函数分配的空间位于堆空间, C语言内存分布包括栈空间、堆空间、数据段(包括BSS段)、代码段。malloc函数原型: void* malloc (size_t size); 功能:请求系统动态分配size个字节的空间,如果分配成功则返回第一个字节的地址。 返回值:如果重新分配成功则返回指向被分配内存的指针,否则返回空指针。calloc函数原型原创 2017-10-01 21:34:53 · 507 阅读 · 0 评论 -
Linux socket 网络编程入门
Linux下的网络编程一般即是指socket套接字编程,入门比较矮简单,网上也有很多入门的例程。不过每次看过用过以后过段时间又忘了具体的操作了,又得去查,所以在这里总结整理一下,也省了以后查别人教程的时间。1. socket套接字流程简介socket套接字包含标准套接字(SOCK_STREAM,SOCK_DRAGM)以及原始套接字(SOCK_RAW),一般我们进行网络编程有标准套接字就够了,但如果要原创 2017-07-23 18:22:08 · 1280 阅读 · 0 评论 -
Linux下 getsockopt/setsockopt 函数使用说明
getsockopt, setsockopt - 获取或设置socket套接字相关的选项函数使用函数原型: int getsockopt(int sockfd, int level, int optname, void *optval, socklen_t *optlen); int setsockopt(int sockfd, int level, int optname, const voi原创 2017-10-11 12:46:04 · 3076 阅读 · 0 评论 -
objdump 目标文件分析
objdump是用来查看目标文件或者可执行的目标文件的构成的gcc工具。1、常用参数说明-f:显示文件头信息-d:从objfile中反汇编那些特定指令机器码的section-D:反汇编所有section-h:显示目标文件各个section的头部摘要信息-x:显示所有可用的头信息,包括符号表、重定位入口。-x 等价于 -a -f -h -r -t 同时指定-i:显示对于 -b 或者 ...原创 2018-11-23 22:31:41 · 1678 阅读 · 0 评论