![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C
请叫我大虾
这个作者很懒,什么都没留下…
展开
-
webserver通信过程
简单的http服务器#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <sys/types.h>#include <sys/socket.h>#include <arpa/inet.h>#include <netinet/in.h>#include <string.h>#include &...原创 2021-03-04 17:13:49 · 498 阅读 · 1 评论 -
Linux下undefined reference to ‘pthread_create’问题解决
Linux下undefined reference to ‘pthread_create’问题解决在试用Linux 线程模块时,试用pthread_create 函数。编译命令为gcc main.c -o test时,会出现如下错误/usr/bin/ld: /tmp/ccAusWl8.o: in function `main':05_concurrent_server_thread.c:(.text+0x44c): undefined reference to `pthread_create.原创 2021-03-04 16:29:53 · 6565 阅读 · 3 评论 -
计算机网络:单播,多播
单播多播原创 2021-03-01 01:02:16 · 301 阅读 · 0 评论 -
计算机网络:socket-udp
启动网络调试助手编写udp客户端#include<stdlib.h>#include<stdio.h>#include<string.h>#include<sys/types.h>#include<sys/socket.h>#include<arpa/inet.h>#include<netinet/in.h>#include<unistd.h>#define N 128int .原创 2021-02-28 13:19:51 · 239 阅读 · 0 评论 -
stat/chmod/access函数简单使用
#include<stdlib.h>#include<stdio.h>#include<sys/types.h>#include<sys/stat.h>#include<unistd.h>int main(int argc, char* argv[]){ if(argc<2){ printf("./a.out filename\n"); exit(1); } struct stat st;// st变量作为.原创 2021-02-22 16:51:16 · 289 阅读 · 0 评论 -
c库IO函数
原创 2021-02-21 15:49:46 · 242 阅读 · 0 评论 -
linux三 gdb/makefeile/io
1. gdb调试 gcc -g生成带有调试信息的可执行文件。gcc main.c -o calc1 lib/libMyCalc.a -g -Iincludegdb 可执行文件,进入gdb模式。使用l查看源代码bread(b) 行数 在某一个打断点info(i) b查看断点信息start开始调试,程序只执行一步。n: 单步调式c: 程序直接执行到下一个断点。...原创 2021-02-19 14:16:47 · 200 阅读 · 0 评论 -
动态库的制作,使用
原创 2021-02-18 23:24:58 · 199 阅读 · 0 评论 -
静态库的制作,使用
head.h文件如下#ifndef _HEAD_H_#define _HEAD_H_int add(int a, int b);int sub(int a, int b);#endifadd.c文件如下#include"head.h"int add(int a, int b){ int result = a+b; return result;}sub.c文件如下#include"head.h"int sub(int a, int b){...原创 2021-02-18 16:30:59 · 221 阅读 · 0 评论 -
c:#ifndef, #define, #endif 作用
#ifndef, #define, #endif 作用#ifndef 它是if not define 的简写,是宏定义的一种,实际上确切的说,这应该是预处理功能三种(宏定义、文件包含、条件编译)中的一种----条件编译。 在sqlite源代码中大量使用了条件编译。如下:#ifndef MIN# define MIN(A,B) ((A)<(B)?(A):(B))#...原创 2019-07-03 18:33:51 · 285 阅读 · 0 评论 -
const char * 、char const *、 char * const 三者的区别
一、const char *ptr; 定义一个指向字符常量的指针,这里,ptr是一个指向 char* 类型的常量,所以不能用ptr来修改所指向的内容,换句话说,*ptr的值为const,不能修改。但是ptr的声明并不意味着它指向的值实际上就是一个常量,而只是意味着对ptr而言,这个值是常量。实验如下:ptr指向str,而str不是const,可以直接通过str变量来修改str的值,但是确...原创 2019-04-08 10:15:17 · 217 阅读 · 0 评论 -
c/c++十七: 变长参数
#include"c1.h"#include<stdarg.h>typedef int ElemType;ElemType Max(int num,...){ // ...表示变长参数表,位于形参表的最后,前面必须至少有一个固定参数 va_list ap; int i; ElemType m, n; if(num<1) exit(ERROR); va_...原创 2019-03-15 14:04:21 · 386 阅读 · 0 评论 -
c语言: 转移字符
转载自:https://www.cnblogs.com/hwl1023/p/4941670.html1. 一般转义字符这种转义字符,虽然在形式上由两个字符组成,但只代表一个字符。常用的一般转义字符为:\a\n\t\v\b\r\f\\\’\"细心的读者可能已经发现,转义字符'\\'代表的反斜杠"\"、转义字符’\’’代表的字符"'"和转义字...转载 2019-03-02 16:56:46 · 1249 阅读 · 0 评论 -
kmp算法
next 数组各值的含义:代表当前字符之前的字符串中,有多大长度的相同前缀后缀。例如如果next [j] = k,代表j 之前的字符串中有最大长度为k 的相同前缀后缀。 帮助理解next数组计算...原创 2019-02-01 10:31:02 · 193 阅读 · 0 评论 -
c: realloc()函数解析
realloc(void *__ptr, size_t __size):更改已经配置的内存空间,即更改由malloc()函数分配的内存空间的大小。如果将分配的内存减少,realloc仅仅是改变索引的信息。如果是将分配的内存扩大,则有以下情况:1)如果当前内存段后面有需要的内存空间,则直接扩展这段内存空间,realloc()将返回原指针。2)如果当前内存段后面的空闲字节不够,那么就使...原创 2018-12-15 17:37:15 · 349 阅读 · 0 评论 -
C十六: 两个指针相减
如果两个指针指向同一个数组,这两个指针相减才会有意义,相减的结果就是两个指针之间的元素个数. C本身无法防止非法的指针减法运算,它无法为你提出任何警告或提示。 #include"stdio.h"int main(){ int num[] = {1,2,3,4,5}; int *p1 = num; int *p2 = &num[4]; printf("...原创 2018-11-26 19:35:06 · 1163 阅读 · 0 评论 -
C十五:数组
c语言中, int n[10], 编译器会分配内存空间。 可以直接操作这个数组. java不同,java必须new 数组#include <stdio.h> int main (){ int n[ 10 ]; int i,j; for ( i = 0; i < 10; i++ ) { n[ i ] = i + ...原创 2018-10-11 15:58:49 · 211 阅读 · 0 评论 -
C十四:结构体
1 首先://注意在C和C++里不同 在C中定义一个结构体类型要用typedef: typedef struct Student { int a; }Stu; 于是在声明变量的时候就可:Stu stu1;(如果没有typedef就必须用struct Student stu1;来声明) 这里的Stu实际上就是struct Student的别名。S...原创 2018-10-11 10:40:47 · 229 阅读 · 0 评论 -
c一:指针引用(int * &p )和指针(int * q)的区别
#include <iostream>using namespace std;int g = 300;void print(int p, int q){ cout << p << endl << q << endl;}/** 1. int *&p 定义一个指针引用,既可以改变指针指向的内容,...原创 2018-07-11 11:02:52 · 3352 阅读 · 1 评论 -
C四:专业名词
escape sequence:转义序列Arithmetic Expressions: 算术运算式comments:注释 declarations:声明 variables:变量 loops:循环 formatted output:格式化输出right-justified:右对齐 Symbolic Constants:符号常量 EOF: end of filepre...原创 2018-07-17 19:53:03 · 259 阅读 · 0 评论 -
c二:数组与指针
原创 2018-07-13 09:34:20 · 198 阅读 · 0 评论 -
C五:输入输出函数
int a = 5;// print() 标准输出函数// 1.printf函数的第一个参数是字符串// 2.第一个参数字符串中的%是占位符,字符串中有多少个%号,字符串的参数要与%的个数,类型匹配// 3.%d,表示整数 %c:字符 %f:浮点 %o:八进制 %x:16进制 %s:字符串 %%:输出一个%// 4.%后跟一个整数,可以控制打印的宽度.比如'%5d',就是打印...原创 2018-07-25 19:01:23 · 258 阅读 · 0 评论 -
C六:define宏定义
#define name replacement ps:注意结尾没有分号replacement可以是字符串,数字name宏定义通常用大写字母表示在程序中,任何"name"都会被相应的"replacement list"替换,如下#define LOWER 50 在程序中,凡是LOWER,在程序运行时,LOWER都会被替换成50 LOWER就是字符常量,不是一个变量.所以他们不...原创 2018-07-26 19:29:00 · 252 阅读 · 0 评论 -
C五:exit()函数作用的程序
#include<stdio.h> #include<process.h> // exit() int a(int i) { if(i==1) { printf("Í˳ö³ÌÐòµÄÔËÐÐ\n"); exit(1); } return i; } int main() { int i; printf...原创 2018-08-09 09:50:50 · 303 阅读 · 0 评论 -
C六:指针可以比较大小
Status ListInsert(SqList &L, int i, ElemType e){ // 算法2.4 // 初始条件:顺序线性表L已存在,1≤i≤ListLength(L)+1 // 操作结果:在L中第i个位置之前插入新的数据元素e,L的长度加1 ElemType *newbase, *q,*p; if(i<1 || i>L.length + 1){ /...原创 2018-08-09 10:02:40 · 2635 阅读 · 0 评论 -
C五:typedef, define
#define LIST_INIT_SIZE 10 // 线性表存储空间的初始分配量 结尾没有分号typedef int Status; // 结尾有分号原创 2018-08-06 15:21:55 · 199 阅读 · 0 评论 -
C七:指向函数的指针 ------ 函数指针(function pointer)
函数具有可赋值给指针的物理内存地址,一个函数的函数名就是一个指针,它指向函数的代码。一个函数的地址是该函数的进入点,也是调用函数的地址。函数的调用可以通过函数名,也可以通过指向函数的指针来调用。函数指针还允许将函数作为变元传递给其他函数。 不带括号和变量列表的函数名,这可以表示函数的地址,正如不带下标的数组名可以表示数组的首地址。定义形式: 类型 (*指针...原创 2018-08-11 20:59:04 · 684 阅读 · 0 评论 -
C八:*与++
指针与++,--的优先级 *和--,++运算符的优先级是一样的,并且执行顺序是从左到右,从近到远。 *p++ // 先取*p的值,然后再执行p++; 如果 char p[4]="123";*(p++) = '1';*(++p)= '2';++的前置和后置的区别++p前置表示先自增后在返回值给变量p++后置表示先返回值给变量再自增int a =1;b = ...原创 2018-08-11 23:58:57 · 404 阅读 · 0 评论 -
c:数据结构-线性表
线性表的基本操作:增加,删除,修改,查询 #define LIST_INIT_SIZE 10 // 线性表存储空间初始分配量 #define LIST_INCREMENT 2 // 线性表存储空间的分配增量 typedef int ElemType; // 采用线性表的动态分配顺序存储结构 struct SqList { ElemType *elem; // 存储...原创 2018-08-22 18:44:56 · 214 阅读 · 0 评论 -
c:线性表的链式表示
和顺序表相比,链式存储结构在实现插入,删除的操作时,不需要移动大量数据元素。但不利于对第i个数据元素的操作. 线性表的单链表存储结构. struct LNode{ ElemType data; LNode *next; }; typedef LNode * LinkList; // 定义一个指向LNode的指针类型. 实现单链表:最好定...原创 2018-08-26 00:06:33 · 258 阅读 · 0 评论 -
C九:free与malloc
free与malloc配合使用. malloc的时候,大小已经告诉系统了。free的时候,系统会比对一下这个地址,是不是malloc申请的,如果不是,不给释放如果是的话,系统就知道要释放多大内存,因为malloc的时候,系统有记录的。当然了,申请的地址,也记录了的,否则,就无法比对了。#include<stdio.h>#include"malloc.h"typedef ...原创 2018-09-12 10:10:17 · 256 阅读 · 0 评论 -
C十:输出格式
对于printf的输出格式,%后面跟的数字表示输出的位数. %8表示输出8位,不足的,左边用空格补齐,类似的还有%-8,同样表示输出8位,不足的,右边用空格补齐。这种对格式的规定,不只是对输出字符串%s有效,对于其它输出格式也同样有效。还可以在%后面和8前面添加字符,表示输出8位,不足的,左边用指定字符补齐。例如:printf("%8s",abcde),输出 abcdeprintf("...原创 2018-09-12 16:01:32 · 356 阅读 · 0 评论 -
C十一:fopen, fread,fwrite
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> #define DATA_SIZE 1024 int writeTest(){ unsigned int *dataPtr = NULL; dataPtr = (unsigned int *)mall...原创 2018-09-14 10:34:19 · 204 阅读 · 0 评论 -
C十二:%*d
int i=1,j=2,k=3; printf("%d,%*d,%d\n",i,j,k,i); //printf中的%*d的意思是输出*个宽度的%d(整形)。 scanf("%*d%d",&i,&j,&k); printf("i=%d, j=%d, k=%d\n",i,j,k); // 读入一个整数,但是并不赋给任何变量。只是单纯的从缓冲区中读出, 类似的还有%...原创 2018-09-14 13:59:40 · 438 阅读 · 0 评论 -
C十三:strcmp函数,比价字符串
#include<stdio.h>#include<string.h>int main(){ char name1[6] = {"abcd"}; char name2[6] = {"abcd"}; int a = strcmp(name1,name2); // 两个参数不相等,返回-1; 两个参数相等,返回0 printf("%d",a);} ...原创 2018-09-14 17:35:18 · 354 阅读 · 0 评论 -
c三:string
"Hello, World\n", 这是字符串常量(string constant or character string)原创 2018-07-16 19:23:27 · 239 阅读 · 0 评论