char函数

__attribute__机制介绍

邮差的信 提交于 2019-12-04 04:54:05
1. __attribute__ GNU C 的一大特色(却不被初学者所知)就是 __attribute__ 机制。 __attribute__ 可以设置函数属性 (Function Attribute) 、变量属性 (Variable Attribute) 和类型属性 (Type Attribute) __attribute__ 前后都有两个下划线,并且后面会紧跟一对原括弧,括弧里面是相应的 __attribute__ 参数 __attribute__ 语法格式为: __attribute__ ( ( attribute-list ) ) 函数属性( Function Attribute ),函数属性可以帮助开发者把一些特性添加到函数声明中,从而可以使编译器在错误检查方面的功能更强大。 __attribute__ 机制也很容易同非 GNU 应用程序做到兼容。 GNU CC 需要使用 –Wall ,这是控制警告信息的一个很好的方式。下面介绍几个常见的属性参数。 2. format 该属性可以使编译器检查函数声明和函数实际调用参数之间的格式化字符串是否匹配 。它可以给被声明的函数加上类似 printf 或者 scanf 的特征,该功能十分有用,尤其是处理一些很难发现的 bug 。 format 的语法格式为: format ( archetype, string-index,

第二次博客园作业

╄→гoц情女王★ 提交于 2019-12-04 04:51:46
一、进制转换器 1、 3、函数介绍: a.主函数: int main() { int c,k; int sign=0; printf("请输入你要转换的进制与转换后的进制(用十进制数字表示,中间用空格隔开):\n"); scanf("%d%d",&M,&N); /*判断输入的进制是否能进行转换*/ do{ c=(M==2&&N==8)||(M==2&&N==10)||(M==8&&N==2)||(M==8&&N==10)||(M==10&&N==2)||(M==10&&N==8); if(c!=1){ printf("输入的进制暂时无法实现转换,请重新输入2、8或10:\n"); scanf("%d%d",&M,&N); } }while(c!=1); printf("请输入你要转换的值:\n"); scanf("%d",&X); if(M==2){ if(N==8){ printf("转换值为0%d",change2to8(X)); /*输出八进制格式*/ }else if(N==10){ printf("转换值为%d",change2to10(X)); /*输出十进制格式*/ } }else if(M==8){ intermediate=change8to10(X); if(N==10){ printf("转换值为%d",intermediate); /*输出十进制格式*/

进制转换器V1.0_Beta

喜夏-厌秋 提交于 2019-12-04 04:40:28
一.截图部分 二.代码部分: char2num() 作用:将字符转化成对应的数字 e.g. '9'->9 'A'->10 int char2num(char ch) { if (ch >= '0' && ch <= '9') { return ch - '0'; } else { return ch - 'A' + 10; } } char num2char() 作用:将数字转化成对应的字符 e.g. 9->'9' 10->'A' char num2char(int num) { if (num >= 0 && num <= 9) { return (char)('0' + num); } else { return (char)('A' + num - 10); } } is_false() 作用:判断输入是否正确,对返回0,错返回1 int is_flase(char ch[], int n) { int i, len, flag = 0; len = strlen(ch); for (i = 0; i < len; i++) { if (char2num(ch[i]) < 0 || char2num(ch[i]) >= n) flag = 1; } return flag; } any2ten() 作用:将任意进制转化为十进制 int any2ten(char str[]

【C语言】-struct

落花浮王杯 提交于 2019-12-04 04:01:21
在c语言中结构体(struct)跟面向对象编程(如java等)里面的类是非常相似的。不过像C++里面对结构体进行了扩展,c++里面的结构体是可以包含方法的,但是C语言里面是不能包含方法(函数)的。 一般格式 struct 结构名 { 类型 变量名; 类型 变量名; ... } 结构变量; 类型为五种数据类型(整型、浮点型、字符型、指针型和 无值型)。 定义结构变量。 struct string { char name[8]; int age; char sex[2]; char depart[20]; float wage1, wage2, wage3, wage4, wage5; } person; 这个例子定义了一个结构名为string的结构变量person, 如果省略变量名 person, 则变成对结构的说明。用已说明的结构名也可定义结构变量。这样定义时上例变成: struct string { char name[8]; int age; char sex[2]; char depart[20]; float wage1, wage2, wage3, wage4, wage5; }; struct string person; 如果需要定义多个具有相同形式的结构变量时用这种方法比较方便, 它先作结构说明, 再用结构名来定义变量。 例如: struct string

C语言字节对齐问题详解

我怕爱的太早我们不能终老 提交于 2019-12-04 03:48:45
本文转自: https://www.cnblogs.com/clover-toeic/p/3853132.html 引言 考虑下面的结构体定义: 1 typedef struct{ 2 char c1; 3 short s; 4 char c2; 5 int i; 6 }T_FOO; 假设这个结构体的成员在内存中是紧凑排列的,且c1的起始地址是0,则s的地址就是1,c2的地址是3,i的地址是4。 现在,我们编写一个简单的程序: 1 int main(void){ 2 T_FOO a; 3 printf("c1 -> %d, s -> %d, c2 -> %d, i -> %d\n", 4 (unsigned int)(void*)&a.c1 - (unsigned int)(void*)&a, 5 (unsigned int)(void*)&a.s - (unsigned int)(void*)&a, 6 (unsigned int)(void*)&a.c2 - (unsigned int)(void*)&a, 7 (unsigned int)(void*)&a.i - (unsigned int)(void*)&a); 8 return 0; 9 } 运行后输出: 1 c1 -> 0, s -> 2, c2 -> 4, i -> 8 为什么会这样?这就是字节对齐导致的问题。

Redis开发与运维:SDS

我们两清 提交于 2019-12-04 02:33:35
STRING 我们会经常打交道的string类型,在redis中拥有广泛的使用。也是开启redis数据类型的基础。 在我最最开始接触的redis的时候,总是以为字符串类型就是值的类型是字符串。 比如:SET key value 我的理解是value数据类型是stirng类型,现在来看呢,这句话说得不够具体全面。 所有的键都是字符串类型 字符串类型的值可以是字符串、数字、二进制 这里也就引出了,另一个概念:外部类型和内部类型 外部类型 vs 内部类型 这里的外部类型,就是我们所熟知的:字符串(string)、哈希(hash)、列表(list)、集合(set)、有序结合(zset)等 Q1:那么什么是内部类型呢? Q2:外部类型和内部类型是什么时候出现的? Q3:为什么要这样设计? 我们先来看问题1,可以这样理解,对外数据结构就像是我们的API,对外提供着一定组织结构的数据。 对内来说,我们可以更换里面的逻辑算法,甚至更换数据存储方式,比如将Mysql换成Redis. 内部类型其实就是数据存储的形式。举现在我们所讨论的stirng来说。 string的外部类型就是string,而它对应的数据内部存储结构分为三种。 int:8个字节的长整形 embstr:<=39个字节的字符串(3.2 版本变成了44) raw:>39个字节的字符串(3.2 版本变成了44) 所以

函数+进制转换器v1.0beta

强颜欢笑 提交于 2019-12-04 02:31:28
1.运行成功的例子如下:(图片较多就不一 一列举) 一. 二. 三. 运行失败的例子如下: 一. 二. 三 . 2.函数介绍 一. char num2(int num)//将数字转换为字符类型,使得16进制也可以进行计算 { if (num >= 0 && num <= 9) { return (char)('0' + num); } else { return (char)('A' + num - 10); } } 二. int changeten(char a[],int n)//将其他进制转换为10进制 { int sum = 0, len,num,i; len = strlen(a); for (i = 0; i < len; i++) { if (a[i] >= '0' && a[i] <= '9') { num = a[i] - '0'; } else if (a[i] >= 'A' && a[i] <= 'F') { num = a[i] - 'A' + 10; } sum = sum * n + num; } return sum; } 三. void chageeverything(int b, int c)//将10进制转换为其他进制 { int count = 0, i; char a[10000]; while (b != 0) { a[count] =

BUUOJ 刮开有奖

陌路散爱 提交于 2019-12-04 02:10:37
说实话这个题真的离谱(最开始一点线索没有,真的难顶) 首先DIEasy看看文件信息: 拖进IDA,发现主要函数WinMain: int __stdcall WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd) { DialogBoxParamA(hInstance, (LPCSTR)0x67, 0, DialogFunc, 0); return 0; } 只有DialogFunc一个函数相关。打开此函数,谢天谢地,有flag的线索了; BOOL __stdcall DialogFunc(HWND hDlg, UINT a2, WPARAM a3, LPARAM a4) { const char *v4; // esi const char *v5; // edi int v7; // [esp+8h] [ebp-20030h] int v8; // [esp+Ch] [ebp-2002Ch] int v9; // [esp+10h] [ebp-20028h] int v10; // [esp+14h] [ebp-20024h] int v11; // [esp+18h] [ebp-20020h] int v12; // [esp+1Ch] [ebp-2001Ch]

quiz 3

牧云@^-^@ 提交于 2019-12-04 01:58:27
1. 一个结构体变量的指针是该结构体变量所占据内存段的起始位置,形如: struct 结构名 * 结构指针变量名 2. 赋值是把结构变量名首地址赋予该指针变量,访问结构变量名成员的常见方式为: 指针变量名->成员名 (*指针变量名).成员名 3. malloc返回的是一个指向分配域起始地址的指针,没有返回NULL 4. 字符串 (a) 直接对字符指针赋值 char *a="hello"; 声明了一个字符指针*a后,将字符串常量“hello”的第一个字符的地址赋值给指针变量a *a仅指向一个字符 (b) 字符串赋值给字符指针 char *p, a='5'; p=&a; p="abcd"; 双引号的作用是在常量区申请空间存放字符串,并在字符串尾部加上'/0',然后将地址返回赋值给指针变量p (c) 字符数组的初始化 char a[10]="hello"; 初始化时可以对字符数组赋予初值,也可以通过下标对其元素进行访问,但 不能通过下标对其直接进行修改 在这里字符数组的解析方式为: char str[10] = {'h', 'e', 'l', 'l', 'o', '\0'}; 可以对字符数组进行修改的方式是strcpy()函数,即: char a[26]; strcpy(a, "catdog"); 而当赋值给字符指针时,如: char* ptr = "abc";

c++ 面试(100题刷题)

陌路散爱 提交于 2019-12-04 01:53:39
目录 1.C++与C的差异 1.1 C与c++中的struct的差异 1.4 c与c++ 不同之处 1.5 指针与引用的区别 1.6 sizeof 1.7 static 的作用域 1.8 c++ 中值传递的三种方式 1.9 inline 函数 1.10 virtual与inline 1.11 Debug和Release的区别 1.12 assert 1.13 const 与#define 1.14 malloc/free 与 new delete 1.15 动态申请内存耗尽 1.20 const 1.21 判断系统是多少位系统 1.22 1.23 1.24 实参与形参 1.25 计算精度误差 1.26 堆和栈 1.27 explicit与protected 1.28 浅拷贝与内存泄漏 ,深拷贝 1.30 数组名作为参数与int 作为参数的区别 1.31 程序的可读性与可维护性-变量 1.32 const 的用法 1.33 virtual 是如何实现多态的? 1.34 面向对象三大特性 1.35 重载 ,重写 ,重定义 1.36 一个空类的对象占的字节数 1.37 内联函数是否参数检查 1.38 析构函数与虚函数 1.40 c++模板编程的理解 1.41 函数模板与类模板 1.41 运算符重载 1.42 基类的析构函数为什么必须是虚函数? 1.43 c++的左值与右值 1.44