C
nemo2011
博客内容皆为个人学习笔记
展开
-
websocketpp.transport.asio.socket:8 TLS handshake failed
从verify_peer修改成verify_none。用openssl重新生成证书对。原创 2023-03-03 20:36:25 · 700 阅读 · 0 评论 -
websocketpp问题集锦
1)openssl库的版本问题,请直接链到你需要的openssl库路径,比如我的就是/usr/local/openssl/lib,ASN1_STRING_data 或 ASN1_STRING_get0_data 符号没有声明,是1.01-版与新版不兼容。2)注意-lssl -lcrypto要写在-ldl -lpthread前面,这四个必须要。原创 2023-03-03 17:00:28 · 464 阅读 · 0 评论 -
编译websocketpp报错
报错:boost_find_component Macro invoked with incorrect arguments for macro boost_find_component。boost版本是1.78.0。原创 2023-03-02 21:55:03 · 318 阅读 · 0 评论 -
动态分配的链表数组
今天上午写了一下动态分配的链表数组,实现一个图。步骤如下:1. 图中的节点的数据结构: 2. 首先要动态分配节点的指针数组。要实现动态的分配指针数组,当然要使用库函数malloc或者new方法去申请一大块内存。比如要申请num个node *类型的内存:(1) malloc方法link *adj = (node **)malloc(sizeof(原创 2012-12-31 20:46:33 · 2668 阅读 · 0 评论 -
参数入栈顺序
#include int func(int , int );int main(){int a = 10;int i = func(a,a++);printf("%d\n", i);return 0;}int func(int x, int y){if(x < y)return 1;else if(x == y)return 0;else return -1;原创 2011-10-17 15:07:36 · 1032 阅读 · 1 评论 -
Linux 多线程编程入门--线程函数解释
创建线程:int pthread_create(pthread_t *restrict thread, const pthread_attr_t *restrict attr, void *(*start_routine)(void*), void *restrict arg);参数: thread输出线程id转载 2012-04-16 13:24:29 · 574 阅读 · 0 评论 -
ISO C89 forbids mixed declarations and code
ISO C90 forbids mixed declarations and code 应在写任何代码之前先进行声明。不要将声明和代码混合在一起。原创 2012-03-17 10:28:58 · 1771 阅读 · 0 评论 -
《A Reference Manual》笔记
编译器在预处理之前删除注释语句,因此注释语句中的预处理命令无法识别,注释语句中的行终结符无法终止预处理命令。 标准C语言中指定,为了进一步转换C 语言程序,所有注释语句转换成一个空格字符,但一些旧的实现不插入任何空白符,这会影响预处理器工作。 编译器从左向右收集字符,总是尽量建立最长的记号,即使结果并不构成有效地C语言程序。相邻记号可以用空白符或注释原创 2012-02-22 14:51:06 · 611 阅读 · 0 评论 -
Expert C Programming总结(二)
1. “声明的形式和使用的形式相似”这种用法可能是C的独创。至今为止一个比较好的声明指针的方法是: int &p; 它至少提示p 是一个整形数的地址。这种语法现已被C++采纳,用于表示参数的传址调用(引用)。 2. 如果想要把什么东西的类型强制转换为指向数组的指针,就不得不使用下面的语句来表示这个强制类型转换: char (*j) [20];原创 2011-11-13 12:02:11 · 522 阅读 · 0 评论 -
execv()函数
今天解决了一下在执行execv()函数时,输出errno时,出现的permisssion denied 或者bad address.的提示。注: 我测试的系统是solaris 9。代码如下:#include #include #include #include using namespace std;//char *init_argv[] = {"ls", "/expor原创 2013-01-03 21:16:13 · 11135 阅读 · 1 评论 -
char * 指针
经典重现:#include #include #include int main(){ char *str = "hello,world."; int len = strlen(str); char *des = (char *)malloc(len+1); char *s = &str[len-1]; char *d = des; wh原创 2011-11-04 18:01:03 · 476 阅读 · 1 评论 -
strncpy和memset
为什么要把strncpy和memset放一块, 是因为这两个经常组合起来一起用的。 在strncpy()之前,先memset()一下。 一般是讲各个字节置为0.首先看看memset()的源码:void* memset(void* s, int c, size_t n){ unsigned char* p = (unsigned char*) s; whil原创 2013-01-15 11:14:34 · 1727 阅读 · 0 评论 -
关于strlen()
关于strlen(), 今天遇到一个问题。 就是我读文本的时候, 然后用strlen()算出一行字符串的长度为len. 然后我打印str[len-1],我以为会打印最后一个字符。 结果它没有。 然后,我就去看strlen()的源码,结果发现:for (char_ptr = str; ((ulong)char_ptr & (sizeof(ulong) - 1)) != 0; ++ch原创 2013-01-31 20:46:37 · 710 阅读 · 0 评论 -
C语言函数sscanf()的用法
转于:http://www.cnblogs.com/lyq105/archive/2009/11/28/1612677.htmlC语言函数sscanf()的用法sscanf() - 从一个字符串中读进与指定格式相符的数据. 函数原型: int sscanf( string str, string fmt, mixed var1, mixed var2 ... ); i转载 2013-02-27 15:52:39 · 515 阅读 · 0 评论 -
make 出现未定义文件中的符号在文件中
make 出现未定义文件中的符号在文件中。出现这个问题有了好几次,所以总结一下:一 可能函数名字写错了二 可能是函数没有被链接到目标文件中,很容易验证:nm XXX.o 三 Makefile的链接问题,比如你引用了某个库的函数,但是在生成目标文件的时候没有链接库。这个总结是来自:http://bbs.chinaunix.net/thread-1342074-1-1.原创 2013-02-28 19:06:02 · 1731 阅读 · 0 评论 -
C语言实现输入密码
今天在做一个密码输入方面的一个逻辑。用scanf会显示出你输入的东西。后来上网查了些资料:个人认为比较简便的两个方法:(1)个人比较推荐的。用getpass()函数。 如: char *passwd = NULL: passwd = getpass("input a passwd:"); pritf("%s \n", passwd);头文件是s原创 2012-11-14 21:11:34 · 3047 阅读 · 0 评论 -
windows 和linux下的fopen()的区别
fopen是C库函数里面的一个函数。打开系统位置中的某文件。windows:FILE *fp = fopen("D:\\quick_sort.c", "r");linux:FILE *fp = fopen("/home/quick_sort.c", "r");关闭都是:fclose(fp);原创 2013-04-02 17:59:38 · 1991 阅读 · 0 评论 -
Linux:cannot open shared object file: No such file or directory
这个问题其实是在编译的时候,加了-L /lib_path 编译选项,但ldd出来后,还是找不到其中的一个.so(叫它libss.so文件吧)。find / libsss.so文件。找到它了, 就在lib_path目录下。后来的解决方法是: 把LIBRARY_PATH设置下。 将lib_path加到LIBRARY_PATH里面。具体为什么, 还得再查下资料。顺便记录下:Wh原创 2013-06-18 16:42:56 · 937 阅读 · 0 评论 -
字符串替换 c
1. 开始写的一个字符串替换程序。 debug的时候报错: Stack around the variable ''***“ was corrupted.说该字符串遭到损害。 所以运行同不过。。 我查了一下, 是因为我 是直接在source 字符数组上做的替换。 所以造成了该错误。。 照理来说字符数组是不会有这种错误。 可能我写得代码有问题。 2. 我在网上搜索原创 2014-02-18 11:52:19 · 2421 阅读 · 0 评论 -
《Expert C Programming》总结(一)
1. 关键字const并不能把变量变成常量! 在一个符号前加上const限定符只是表示这个符号不能被赋值。也就是它的值对于这个符号来说是只读的,但它并不能防止通过程序的内部(甚至是外部)的方法来修改这个值。const最有用之处就是用它来限定函数的形参。 2. 算术转换。如果其中一个操作数的类型是:unsigned,那么另一个操作数被转换为:unsigned,计算结果的类原创 2011-11-12 20:21:39 · 725 阅读 · 0 评论 -
Sizeof与strlen
深入理解Sizeof与strlen的本质简单的讲,sizeof 是求变量或类型的存储长度。而strlen 是统计字符串中字符的个数,不包括终止符‘\0’。sizeof 是求得实体(就是"()"里面包含的变量或者类型字)的字节单位长度。按照类型来判断;strlen 是求得字符的长度,累加搜索,直到 \0截至为止。 sizeof(xxx)是个保留字,用来求分配给xxx的内存转载 2011-11-13 10:02:06 · 654 阅读 · 0 评论 -
如何引用一个已经定义过的全局变量 与 全局变量可不可以定义在可被多个.C文件包含的头文件中
1.如何引用一个已经定义过的全局变量? 答:extern 可以用引用头文件的方式,也可以用extern关键字,如果用引用头文件方式来引用某个在头文件中声明的全局变理,假定你将那个编写错了,那么在编译期间会报错,如果你用extern方式引用时,假定你犯了同样的错误,那么在编译期间不会报错,而在连接期间报错。 2.全局变量可不可以定义在可被多个.C文件包含的头文件中?为什么?转载 2011-11-12 20:23:04 · 1209 阅读 · 0 评论 -
Program received signal SIGSEGV, Segmentation fault.
GDB调试的时候出现了: Program received signal SIGSEGV, Segmentation fault.(程序收到信号SIGSEGV,分段故障) SIGSEGV:在POSIX兼容的平台上,SIGSEGV是当一个进程执行了一个无效的内存引用,原创 2011-10-17 22:32:21 · 48308 阅读 · 4 评论 -
typedef常见用法
今天看了周立功的笔试题,有一个是关于typedef 的。是函数指针的问题,开始我没有明白,后来百度了一篇关于typedef的常见用法,找到了答案。现在贴出来,也便于自己复习。内容如下:typedef常见用法1.常规变量类型定义例如:typedef un转载 2011-10-09 12:54:25 · 527 阅读 · 0 评论 -
sprintf的使用和关于内存分配问题
#include char *itoa(int );int main(){int i ;scanf("%d", &i);char *str = itoa(i);printf("%s\n", str);return 0;}char *原创 2011-10-16 19:42:01 · 4273 阅读 · 0 评论 -
详解C中volatile关键字
volatile提醒编译器它后面所定义的变量随时都有可能改变,因此编译后的程序每次需要存储或读取这个变量的时候,都会直接从变量地址中读取数据。如果没有volatile关键字,则编译器可能优化读取和存储,可能暂时使用寄存器中的值,如果这个变量由别的程序更新了的话,将出现不一致的现象转载 2011-10-13 14:08:49 · 534 阅读 · 0 评论 -
关于static的一道题目和static 的小结
昨晚做得一道题目,void test(){ static int a ;a = a + 2;}问运行后,a 的值是多少?我后来在机子上运行了之后,结果是2。原因: a开始初始化的时候,应该是0。所以a的结果是2。原创 2011-10-11 10:12:21 · 689 阅读 · 0 评论 -
error: conflicting types for ‘getline’
错误:651: note: previous declaration of ‘getline’ was hereerror: conflicting types for ‘getline’651: note: previous declaration of ‘getl原创 2011-09-27 14:57:02 · 5567 阅读 · 0 评论 -
getchar()的错误
这次继续写getchar()所犯的错误。首先是定义的时候出错了:char c ; c = getchar() != EOF; 第一,c 的类型应该是int 类型。 第二, (c = getchar()) != EOF才是正确的。前面那个,先会执行!=运原创 2011-09-27 21:17:32 · 1327 阅读 · 0 评论 -
c语言中static 用法总结
一、c程序存储空间布局 C程序一直由下列部分组成: 1)正文段——CPU执行的机器指令部分;一个程序只有一个副本;只读,防止程序由于意外事故而修改自身指令; 2)初始化数据段(数据段)——在程序中所有赋了初值的全局变量,存放在这里。 3)非初始化数据段(bss段)——在程序中没有初始化的全局变量;内核将此段初始化为0. 4)栈—转载 2011-10-25 18:56:31 · 970 阅读 · 0 评论 -
Linux下的段错误(segmentation fault)产生的原因及调试方法
1. 对sizeof(int)的测试。 int i = 0; i = sizeof(int);printf("%d\n", i ); 输出结果是:4. 而且没有编译错误。 说明这个格式是允许的。 2. 我经常遇到这样的问题:segmentation fault。所以,今天转载了一篇处理这个问题的调试方法:转载 2011-10-25 21:11:02 · 921 阅读 · 0 评论 -
Expert C Programming 总结(四)
1. 80386在80286的基础上增加了两种新的地址模式:32位的保护模式和虚拟的8086模式。 2. 今天,计算机系统结构的真正挑战不在于内存的容量,而是内存的速度。 3. 虚拟内存只是对多层存储进行扩充,使用磁盘而不是主存来保存进行进程的映像,所以说他们是同一种策略。 4. SunOS中的进程执行于32位地址空间。操作系统负责具体细节,使每个原创 2011-11-17 17:27:03 · 655 阅读 · 0 评论 -
传入参数为NULL的悲剧
(一) 这个错误我调试了很久,现在些日志以示警戒。我写的是一个普通的链表。但是出现了很多让我苦笑不得的错误。最后的原因归结为:我传入了NULL指针给InitList()函数。实在不应该呀。昨天看书的时候,看到给printf()传入NULL 指针的悲剧,没有想到我就犯了这个错误。废话少说,现在上实例:原来的错误: int main(int argc, char** argv)原创 2011-11-23 11:37:44 · 2552 阅读 · 0 评论 -
由多次引进头文件引起的“血案”
今天下午继续写程序,调试程序。出现了error: redefinition of ‘struct LNode’; error: redefinition of typedef ‘ElemType’等,重复定义的错误。开始也调试了很久,以为是定义这边的问题,后来,回头想想,看看以前的文件,include进来的文件,只有一个,如果多次引进(或者说包含)头文件的话,就会引起重复定义的错误。原创 2011-11-23 16:58:48 · 1298 阅读 · 0 评论 -
Expert C Programming 总结 (六)
这是第九章的内容了。哈哈。看得比较慢拉。但是还是得看下去哈。这本书实在是写得太好了。 1. 声明本身还可以进一步分成三种情况: (1)外部数组的声明。 (2)数组的定义(记住,定义是声明的一种特殊情况,它分配内存空间,并可能提供一个初始值)。 (3)函数参数的声明。 2. 所有作为函数参数的数组名总是可以通过编译器转换为指针。原创 2011-11-21 20:57:42 · 489 阅读 · 0 评论 -
关于:warning: implicit declaration of function 的总结
经历了多次的这样的warning后,我在网上查找了这方面的资料,发现有个人总结的还可以吧。所以把它贴出来。供自己以后查阅。 发现主要有2种情况会产生这种warning 1 没有把函数所在的c文件生成.o目标文件 2 在函数所在的c文件中定义了,但是没有在与之相关联的.h文件中声明原创 2011-11-21 15:17:14 · 2783 阅读 · 0 评论 -
Expert C Programming 总结(五)
1. 标准C语言具有八进制,十进制和十六进制常量,但是没有二进制常量。 2. 警惕! 真正值得注意之处———参数也会被提升!另一个会发生隐式类型转换的地方就是参数传递。这就是为什么单个的printf()格式字符串%d能适用用于几个不同类型,short,char或int,而不论实际传递的是上述类型的哪一个。函数从堆栈中(或寄存器中)取出来的参数总是int类型。 3. 隐式原创 2011-11-18 15:40:58 · 542 阅读 · 0 评论 -
Linux中errno使用
当linux中的C api函数发生异常时,一般会将errno变量(需include errno.h)赋一个整数值,不同的值表示不同的含义,可以通过查看该值推测出错的原因,在实际编程中用这一招解决了不少原本看来莫名其妙的问题。但是errno是一个数字,代表的具体含义还要到errno.h中去阅读宏定义,而每次查阅是一件很繁琐的事情。有下面几种方法可以方便的得到错误信息 (1)void perro转载 2011-10-30 22:04:26 · 739 阅读 · 0 评论 -
堆和栈的区别
一、预备知识—程序的内存分配一个由c/C++编译的程序占用的内存分为以下几个部分1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。3、全局区(静态区)(stati转载 2011-10-30 21:24:10 · 510 阅读 · 0 评论 -
Expert C Programming 总结(三)
1. 准则:不要让程序中的任何符号成为全局的,除非有意把它们作为程序的接口之一。 2. 编程语言理论的经典对立之一就是代码和数据的区别。蠕虫的攻击方法的原理就是把数据转换为代码。代码和数据的区别也可以认为是编译时和运行时的分界线。 3. 在unix中,段表示一个二进制文件相关的内容块。 4.数据段包含经过初始化的全局和静态变量以及它们的值。bbs段原创 2011-11-13 18:20:13 · 529 阅读 · 0 评论