奇怪的C函数

PCB Layout总结 PCB Layout作为硬件设计中的一个环节,也是很重要的一个环节;在硬件电路设计合理的情况下,他其实是影响性能的一个绝对重要的指标。现在很多的PCB Layout工程师都是按照硬件工程师或者PI SI工程师给出的约束规则来完成布局布线的,这些也就是俗称的 “拉线工”。他们重复而机械的完成一块块PCB设计,一段时间设计后,他们中的一些或许已经有了这样的一些经验:哪些要做等长,哪些要走粗、哪些要平... 阅读详情

 C语言传参

#include<stdio.h>
#include<stdlib.h>

// argc 参数个数 
int main(int argc,char **argv)
{
    if(argc!=3)
    {
        printf("Usage: add x y");
        return -1;
    }
    else
    {
        printf("%d \n",atoi(argv[1])+atoi(argv[2]));
    }
    return 0;
}

C语言单引号与双引号

int quotes_test()
{
    // 单引号引起的字符代表整数 大小为1个字节
    printf("%d",'c');
    // 双引号引起的字符代表字符串 大小为字符串字节数+1 (/0)
    printf("%s","c");
}

fib

int fib(int n)
{
    return (n<2) ? n : (fib(n-1)+fib(n-2));
}

内存分配

int memory_test()
{
    // 局部变量在栈区开辟内存空间,由系统管理内存空间,函数结束之后释放,不需要malloc开辟空间
    // int *p;
    // int *p = malloc(sizeof(int));
    // malloc函数的返回值为 void* 类型,可强制类型转换
    int *p = (int *)malloc(sizeof(int));
    if(p == NULL)
        return -1;
    memset(p,0,sizeof(int));
    // calloc 在开辟空间的时候会将分配的内存初始化为0 `calloc()`==`malloc() + memset()`
    // int *p = (int *)calloc(1,sizeof(int));
    // malloc主要为数组和自定义数据结构分配内存
    // int *p = (int *)malloc(sizeof(int)*10);
    // 重新开辟更大的内存空间
    p = realloc(p,sizeof(int)*2);
    if(p == NULL)
        return -1;
    *p=10;
    printf("%d \n",*p);
    free(p);
    p=NULL;
    return 0;
}

断言

// 取消断言
// #define NDEBUG
#include<assert.h>
#define PI 3.14

static int assert_test()
{
    // assert(PI<3);
    int a;
    // 静态断言 补充输出错误提示
    static_assert(sizeof(a)==4,"Assertion `PI<3' failed");
    printf("%f \n",PI);
    return 0;
}

数据库操作

//  gcc consql.c -o sql -L/usr/lib64/mysql -lmysqlclient -lpthread -lm -lrt -ldl
 
 #include<stdio.h>
 #include<stdlib.h>
 #include<unistd.h>
 #include<string.h>
 #include<assert.h>
 #include<mysql/mysql.h>

int main()
{
    //初始化mysql
    MYSQL*mysql=mysql_init(NULL);
    if(mysql==NULL)
        return -1;

    //连接数据库
    mysql=mysql_real_connect(mysql,"127.0.0.1","root","123456","school",3306,NULL,0);
    if(mysql==NULL)
        return -1;

    // 执行sql语句

    char *sql=NULL;
    int res=0;

    // sql="insert into tb_student values(4557,'王五',1,'1999-02-01','四川成都',1)";
    // res=mysql_query(mysql,sql);
    // if(res!=0){
    //     return -1; 
    // }

    sql="select * from tb_student";
    res=mysql_query(mysql,sql);
    if(res!=0)
        return -1;

    //获取结果集
    MYSQL_RES *mysql_res=mysql_store_result(mysql);
    if(mysql_res==NULL)
        return -1;

    // 遍历数据库遍历
    for(int row=0;row<mysql_res->data->rows;row++){
        MYSQL_ROW mysql_row=mysql_fetch_row(mysql_res);
        for(int col=0;col<mysql_res->data->fields;col++){
            if(col==2){
                strcmp(mysql_row[col],"0") ? printf("男 \t") : printf("女 \t");
                continue;
            }
            printf("%s \t",mysql_row[col]);
        }
        printf("\n");
    }

    mysql_free_result(mysql_res);
    mysql_close(mysql);
    exit(0);
}

结构体指针构造静态链表

struct node
{
    int value;
    struct node* next; 
};

int main()
{
    struct node node1,node2,node3;
    node1.value=100;
    node2.value=200;
    node3.value=300;
    node1.next=&node2;
    node2.next=&node3;
    node3.next=NULL;
    struct node* current_node = &node1;
    while(current_node != NULL){
        printf("%d ",current_node->value);
        current_node=current_node->next;
    }
    return 0;
}

双向

struct node
{
    int value;
    struct node* next; 
    struct node* pre;
};

void node_init(struct node * head)
{
    head->pre=head;
    head->next=head;
}

void node_insert(struct node * head, struct node * element)
{
    element->pre=head;
    element->next=head->next;
    head->next->pre=element;
    head->next=element;
}

int main()
{
    struct node head,element1,element2,element3;
    head.value=1;
    element1.value=200;
    element2.value=300;
    element3.value=400;
    node_init(&head);
    node_insert(&head,&element1);
    node_insert(&head,&element2);
    node_insert(&head,&element3);
    struct node * current_node = &head;
    while(current_node->next!=&head){
        printf("%d ",current_node->next->value);
        current_node=current_node->next;
    }
    return 0;
}

栈区(局部变量尽量创建在堆区(malloc开辟内存空间)或者全局区(static修饰))

char * get_str()
{
    char * str="asdfgh";//字符常量首先开辟到全局区,再拷贝到栈区
    return str;
}

int main(int argc, char ** argv)
{
    // char buf[128];
    // strcpy(buf,get_str());//内存空间销毁之前拷贝到新的内存区域
    // printf("%s",buf);
    char * p = get_str();//栈区的内存空间在函数结束的时候释放
    printf("%s", *p);//该段内存空间已经释放,读取非法空间会引发段错误
    return 0;
}

union

/* 
   可以存放多种不同类型的成员变量,所有成员引用的是内存中的相同位置,
   以最大的成员的内存长度作为union的内存大小,所有的数据成员具
   有相同的起始地址。
*/
union Data {
    int a;
    char b;
};

int main()
{
    union Data data;
    data.a=1; 
    if(data.b==1){ // 01 00 00 00
        printf("小端存储 \n");
    }else{ // 00 00 00 01
        printf("大端存储 \n");
    }
    return 0;
}

数独

void show(int num[][9])
{
    for(int i=0;i<9;i++)
    {
        for(int j=0;j<9;j++)
        {
            printf("%d  ",num[i][j]);
        }
        printf("\n");
    }
}


int findvalue(int sudoku[9][9], int i, int j)
{
    int m, n, k;
    int temp[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
    for(k=1; k<10; k++)
    {
        if(temp[sudoku[i][k-1]]==0)
            temp[sudoku[i][k-1]] = sudoku[i][k-1];
        if(temp[sudoku[k-1][j]]==0)
            temp[sudoku[k-1][j]] = sudoku[k-1][j];
    }
    for(m=0; m<3; m++)
        for(n=0; n<3; n++)
            if(temp[sudoku[i/3*3+m][j/3*3+n]]==0)
                temp[sudoku[i/3*3+m][j/3*3+n]] = sudoku[i/3*3+m][j/3*3+n];
    for(k=1; k<10; k++)
        if(temp[k]==0)
        {
            temp[0]++;
            m=k;
        }
    if(temp[0]==0)
        return -1;
    else if(temp[0]==1)
        return m;
    else
        return 0;
}


int main(void)

{
    int sudoku[9][9] = {{8, 3, 0, 0, 0, 7, 0, 0, 0},
                        {1, 2, 5, 0, 0, 9, 4, 0, 0},
                        {0, 7, 9, 1, 0, 0, 0, 3, 0},
                        {0, 0, 6, 0, 8, 0, 0, 9, 1},
                        {0, 0, 0, 9, 5, 1, 0, 0, 0},
                        {9, 1, 0, 0, 7, 0, 5, 0, 0},
                        {0, 9, 0, 0, 0, 5, 7, 4, 0},
                        {0, 0, 8, 7, 0, 0, 2, 6, 9},
                        {0, 0, 0, 4, 0, 0, 0, 5, 0} };
    // int sudoku[9][9]={0};
    // init(sudoku);
    printf("question: \n");
    show(sudoku);
    int i, j, temp, empty = 0;
    for(i=0; i<9; i++)
    {
        for(j=0; j<9; j++)
            if(sudoku[i][j]==0)
                empty++;
    }
    while(empty)
    {
        for(i=0; i<9; i++)
        {
            for(j=0; j<9; j++)
            {
                if(sudoku[i][j]==0)
                {
                    temp = findvalue(sudoku, i, j);
                    if(temp==-1)
                    {
                        printf("无解!\n");
                        return 1;
                    }
                    sudoku[i][j] = temp;
                    if(temp!=0)
                        empty--;
                }
            }
        }
    }
    printf("answer: \n");
    show(sudoku);
    return 0;
}

整型转换成二进制

#include<stdio.h>

static int getComplement_2(const int number, int* result)
{
    int index = 0;
    unsigned int num = number;
    while(num != 0)
    {
        result[index++] = num%2;
        num = num / 2;
    }
    return 1;
}

int main()
{
    int result[32] = {0};
    int i = 32;
    if(1 == getComplement_2(-1,result))
    {
        while(--i >= 0)
        {
            (i+1)%4 == 0 ? printf(" ") : 1;
            printf("%d",result[i]);
        }
    }
    return 0;
}

my_strncpy

#include<stdio.h>

static char* my_strncpy(char* dst, const char* src, size_t n)
{
    char* ret = dst;
    // 自拷贝会覆盖 需要分情况讨论 
    if(dst<src)
    {
        while(n--)
        {
            *dst++ = *src++;
        }
    }
    else
    {
        int i = 0;
        while(i++<n)
        {
            dst[n-i] = src[n-i];
        }
    }
    return ret;
}

int main()
{
    char arr1[] = "abcdef";
    char arr2[] = "gh";
    printf("%s\n", my_strncpy(arr1,arr2,2));
    return 0;
}

PCB层叠结构与阻抗计算 1.Core 和 PP PCB两个重要组成部分:Core 和 Prepreg(半固态片,简称PP)。 如下图所示, Core 的两个表面都铺有铜箔,可作为信号层、电源层、地层等导电层,Core的上下表面之间填充的是固态材料; PP的表面不铺铜,在PCB中起填充作用,其材质是半固体的树脂材料,因此比Core略软一些。 在制作多层板时,需配合使用Core和PP,一般在两个Core 之间应选PP作为填... 阅读详情

相关推荐

速腾RS-LiDAR-16激光雷达ROS环境搭建与点云可视化实战指南

本文提供速腾RS-LiDAR-16激光雷达在ROS环境下的完整搭建与可视化实战指南。从硬件连接、网络配置、驱动安装编译,到核心参数详解与Rviz点云可视化,手把手解决IP设置、坐标系对齐等常见问题,帮助开发者快速实现激光雷达三维点云数据的采集与显示。

weixin_29271263的博客 369

C语言输入函数的一些奇怪现象

在谭浩强那本书里面,对于输入函数的解释说明只是一些基本的用法,然而我们在日常使用中,会发生一些奇怪的现象,我们需要用更多的理论知识来解释之。 下面先列举一些奇怪的现象,如果你也出现过这样的现象,并且对其迷惑不解,那么,请继续看下去。 一、奇怪的现象 1. 奇怪现象一: 运行如下代码 #include <stdio.h> int main() { char a; scanf_s("%c", &a); printf("%d", a); return 0; } 结果: 我们在输入

m0_51307090的博客 561

嵌入式铁头山羊stm32-GPIO的四种输入模式-Day5

本文详细解析了GPIO的输入结构和工作原理,包括上拉/下拉模式、悬空设计、保护二极管机制等关键内容。重点阐述了不同输入模式下电流流向与电压变化,解释了上拉/下拉电阻、施密特触发器、保护二极管等元件的作用。特别对保护二极管的工作机制进行深入分析,说明其在过压/欠压时的钳位保护功能。同时解答了关于电压差、电流方向、负电压等常见疑问,并强调GPIO设计的灵活性(可配置上拉/下拉/悬空)是为了适应不同外设需求。全文通过电路分析和生活类比,帮助读者理解GPIO输入电路的工作原理和设计考量。

古泽汉书的博客 1978

KEIL中C99模式下,函数未声明造成的奇怪现象

keil C99 implicit function declaration

weixin_43923755的博客 862

5分钟搞定Google Custom Search API申请:从注册到获取CX Key全流程

本文详细介绍了如何快速申请和配置Google Custom Search API,从Google Cloud项目创建、启用计费、获取API Key,到在Programmable Search Engine控制台创建自定义搜索引擎并获取关键的CX Key,提供了全流程实战指南。文章还包含安全配置建议、API调用测试方法及前端与后端的集成代码示例,帮助开发者高效实现网站或应用的智能搜索功能。

weixin_29227585的博客 1666

ESP32 CAM使用教程(入门级)

串口被占用,可以关闭其他使用到串口的界面;先将手机也连上wifi,然后使用手机浏览器打开这个IP地址,注意手机连接的wifi需要和开发板的wifi一致,也就是程序里自己修改的那个wifi,否则无法打开IP地址;将开发板连接到电脑,点击点击工具→端口,然后选择自己实际接的COM口,不清楚COM口的可以打开电脑设备管理器查看一下,插拔设备看看哪个COM口会刷新就是哪个COM口;安装好esp32库之后,点击工具→开发板→esp32→AI Thinker ESP32-CAM,型号要仔细找找,不要选错了;

qq_34426854的博客 2万+

1、结合C语言缓冲区谈scanf函数,那些奇怪的行为其实都有章可循

scanf() 是带有缓冲区的。遇到 scanf() 函数,程序会先检查输入缓冲区中是否有数据: 如果没有,就等待用户输入。用户从键盘输入的每个字符都会暂时保存到缓冲区,直到按下回车键,输入结束,scanf() 再从缓冲区中读取数据,赋值给变量。 如果有数据,哪怕是一个字符,scanf() 也会直接读取,不会等待用户输入。 请看下面的例子: #include <stdio.h&gt...

qq_35863872的博客 3913

ESP32驱动GC9A01圆形屏实战:Arduino平台LVGL移植与图像显示优化

本文详细介绍了在Arduino平台上使用ESP32驱动GC9A01圆形屏的实战指南,包括硬件连接、LVGL移植与图像显示优化。通过SPI配置、LVGL库安装和双缓冲机制等技巧,帮助开发者快速实现高效显示效果,适用于智能家居控制面板等应用场景。

weixin_29182481的博客 735

c++bool函数_奇怪的C语言程序,if条件明明为假,这个函数为何还会执行呢?

昨天浏览外文论坛帖子,发现一个有趣的问题。这个问题产生的原因是程序员编写C语言代码不规范造成的,这也是很多初学者容易犯的错——只关注核心功能,而不关注细节。问题是这样的问题小明在源文件 f1.c 里定义了一个布尔函数,相关的C语言代码是下面这样的:#include bool f1(){ int var1 = 1000; int var2 = 2000; int var3 = var1 + var2...

weixin_31786973的博客 533

从苏宁电器到卡巴斯基第02篇:我的本科时光(中)

怎么还分班了呢? 大概是在大二第二学期的时候吧,学院突然通知我们要分班。因为我们目前所有学生都是属于工商管理专业的,而从下个学期开始,就要分为会计、市场营销以及工商管理这三个方向。这还真是打了我一个措手不及,我都不知道还有分班这一回事。不过也没关系,我继续选择我的工商管理就好了。不过,在实际的选择结果上,像会计和工商管理这种学科,选的人自然是占了绝大多数,而选择市场营销的,大概也就是十

Gleam的专栏 9605

运维简历优化指南,DeepSeek助您运维简历秒变高分!

例如,当掌握了新的运维技术,如 Serverless 架构的运维管理,就将其添加到简历的专业技能部分,并简要描述在相关项目中的应用情况和成果,如 “在 [项目名称] 中,负责 Serverless 架构的运维工作,成功实现了应用的低成本、高弹性运行,降低了运维成本 30%”。上传简历至 DeepSeek,并输入指令:“请根据以下岗位招聘要求,帮我重新解构我的简历,按照【教育背景→实习经历→项目经历→个人评价→技能证书】的模块,输出一份符合下述岗位的简历,提升我的求职竞争力。

大模型大数据攻城狮的专栏 1467

bool c语言_奇怪的C语言程序,if条件明明为假,这个函数为何还会执行呢?

昨天浏览外文论坛帖子,发现一个有趣的问题。这个问题产生的原因是程序员编写C语言代码不规范造成的,这也是很多初学者容易犯的错——只关注核心功能,而不关注细节。问题是这样的问题小明在源文件 f1.c 里定义了一个布尔函数,相关的C语言代码是下面这样的:#include bool f1(){ int var1 = 1000; int var2 = 2000; int var3 = var1 + var2...

weixin_39933414的博客 492

ESP32-C3入门教程 WiFi篇①——WiFi Scan 扫描附近AP无线热点 | 堵塞等待扫描结果,回调事件通知扫描结果

文章目录一、快速运行二、运行效果三、程序流畅四、关键函数4.1 扫描所有有效的AP4.2 获取上次扫描中找到的AP列表4.3 获取上次扫描中找到的AP数 一、快速运行 示例项目中,选择WiFi—>scan menuconfig配置ESP32C3-Specific—>Rec 0 芯片选择ESP32-C3(Built-in USB JTAG) 快速运行ESP-IDF Build, Flash and Monitor(左下角) 二、运行效果 三、程序流畅 esp_netif_init,初始

5417

C语言Dialogbox添加图片,DialogBox函数的奇怪问题

该楼层疑似违规已被系统折叠隐藏此楼查看此楼代码没写完,只写了一部分。对话框启动不了,不知道是什么原因,按F11调试发现DialogBox后对话框消息处理函数根本没被调用,这种现象很奇怪,DialogBox怎么会不调用呢?难道这个API出问题了?对话框模板名都和资源里的一致,但对话框就是无法启动。请高手帮我分析一下,最好能亲自编译运行以下,因为我相信看是看不出来问题的。谢谢了#include#in...

weixin_30359265的博客 196

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

【 奇怪的知识又增加了】C语言函数返回1和返回0究竟哪个好?

基本上,没有人会将大段的C语言代码全部塞入 main() 函数。更好的做法是按照复用率高、耦合性低的原则,尽可能的将代码拆分不同的功能模块,并封装成函数。 C语言代码的组合千变万化,因此函数的功能可能会比较复杂,不同的输入,常常产生不同的输出结果。 ◔ C语言函数的返回值 C语言函数可以通过返回值表示输出结果,例如 log() 函数的返回值会根据不同的输入,返回不同的值。再比如,我们定义一个函数 myopen(),用于打开某个文件,那么,这个函数要么能够成功打开文件,要么打开文件失败,这时,可

HUYA69的博客 410

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

c语言参数个数检查,C语言中函数定义中参数个数的奇怪问题

今天在用C语言编译程序的编译通不过,在调用一个函数read_image()的时候,提示说:too many arguments to function 'read_image'setup.c /fragstats line 287查看源代吗中与read_image相关的地方:grep read_image .c.hckback.c: * Call read_image with the image...

weixin_29016315的博客 617

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

第四章 C语言输入输出_结合C语言缓冲区谈scanf函数,那些奇怪的行为其实都有章可循

上节讲到,scanf() 是从标准输入设备(键盘)读取数据,带有行缓冲区的,这让 scanf() 具有了一些独特的“性格”,例如可以连续输入、可以输入多余的数据等。反过来,scanf() 也出现了一些奇怪的行为,例如,有时候两份数据之间有空格会读取失败,而有时候两份数据之间又必须有空格。 scanf() 的这些特性都是有章可循的,其根源就是行缓冲区。 当遇到 scanf() 函数时,程序会先检查输入缓冲区中是否有数据: 如果没有,就等待用户输入。用户从键盘输入的每个字符都会暂时保存到缓冲区,直到按下回车键

qq_43205256的博客 493

c语言gets函数编译出错,一个关于gets函数的奇怪问题 无人能解··

我不知道你是什么编辑器,我用的是dev C++ 发现new是一个关键字,还有许多函数应用没有用头文件/*网页上的程序*/#include#include#include#includetypedef struct worker{int num;char name[20];char sex;int age;}Linklist;void ccode(char * , int *);void me...

weixin_33488923的博客 538

奇怪的电梯

/ 判断向下跳的位置是否合法(在范围1到n内)并且如果从当前位置向下跳到达down位置的步数比之前记录的到达down位置的步数要小。// 判断向上跳的位置是否合法(在范围1到n内)并且如果从当前位置向上跳到达up位置的步数比之前记录的到达up位置的步数要小。// 如果目标位置b的步数还是初始的那个很大的值,说明没办法到达,输出 -1,否则输出到达目标位置b的步数。// 定义全局变量,n表示范围,k数组用于存储跳跃步数,v数组用于记录到达某个位置的最少步数。// 读取范围n,起始位置a,目标位置b。

2401_88402369的博客 591

记录一个很奇怪的c语言某某lib中某某函数already defined in 某某.lib

今天编译一个程序,会用到很多库,编译时报错aaa.lib(AAA.obj) error LNK2005 InRangEx already defined in bbb.lib (BBB.obj)确实这个函数在两个库中都有声明和实现,但是两个库除了本身文件外,还共同使用的了同一头文件和源文件,然后程序引用这两个库的时候报错了,程序本身并不引用那个共同头文件中的函数,不管怎么rebuild都没用,这个

youyudexiaowangzi的专栏 750

dumpbin发现没有入口函数_Dumpbin显示奇怪的方法名称(在MS Visual C ++中生成导出函数)...

I have created new Win32 project in my VS and have selected Dynamic Library ( *.dll ) for this aim.I have defined some exporting function in the main file:__declspec(dllexport)int TestCall(void){int v...

weixin_35086195的博客 217

c语言错误在函数中显示,一道c语言上奇怪的错误!在per函数中我输入的n的值竟然和printf显...

该楼层疑似违规已被系统折叠隐藏此楼查看此楼谢谢啦,不过我也编好一个了,请高手指点一下,谢谢!#include#include#definej4inta[j][j]={0};intsum=0;voidswap(int*a,int*b);intni(int,int,int,int);voidmain(){intper(int*h,inti,intn);fo...

weixin_42640676的博客 274

dumpbin发现没有入口函数,Dumpbin显示奇怪的方法名称(在MS Visual C ++中生成导出函数)...

I have created new Win32 project in my VS and have selected Dynamic Library ( *.dll ) for this aim.I have defined some exporting function in the main file:__declspec(dllexport)int TestCall(void){int v...

weixin_39629780的博客 148

IDL的奇怪问题

用的时候感觉idl有各种奇怪的问题,以前用python,C#,C都没有感觉那么怪,下面记录一下各种怪问题 1.函数名不能用大写字母 但是编译的时候,函数名是全部大写,变量名也随便大小写,并不区分,但是到函数名这里写大写就会有问题。 ...

aquayhy的博客 962

进制转换c语言代码_奇怪的C语言代码,有些函数在变量前加上(void)是什么类型转换?...

C语言的语法极其简洁,即使是初次接触编程语言的初学者也能很快学完它的语法。不过,C语言也是一门“灵活得过了头”的编程语言,对于很多初学者来说,编写C语言程序就好像拿着一堆最基本的砖块,要修建一座大厦一样,茫然找不到方向。茫然找不到方向奇怪的C语言代码对于初学者来说,阅读项目源代码是学习和巩固C语言编程能力的一个好方法——从前辈们的一些优秀C语言项目中,我们能够学到很多编写程序方面的思考方式,也就是...

weixin_39588983的博客 178

c语言 头文件可以定义的函数吗_C 语言 <limits.h> 头文件中 INT_MIN 奇怪定义的分析...

C 语言标准库中定义了整型数的最大值和最小值,以 GCC 编译器为例,其定义如下:#defineINT_MAX2147483647#defineINT_MIN(-INT_MAX-1)这里产生一个疑问:为什么INT_MIN不直接定义成 -2147483648,而是写成 -2147483647-1 这种形式呢?这里涉及到 C 语言如何定义常量,C 语言标准文档对常量的解释如下:“An...

weixin_39989190的博客 272
上一篇: grep awk sed
下一篇: C++ virtual实现
m_0806
博客等级 码龄7年 25粉丝 44原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值