char函数

指针、数组与sizeof运算符

那年仲夏 提交于 2020-02-01 01:51:37
1、sizeof是C语言的一个运算符(主要sizeof不是函数,虽然用法很像函数),sizeof的作用是用来返回()里边 的变量或者数据类型占用的内存字节数。 2、sizeof存在的价值: 主要是因为在不同平台下各种数据类型所占的内存字节数不尽相同(譬如int在32位系统上为4字节,在16位系统上 为2字节)。所以程序中需要使用sizeof来判断当前变量/数据类型在当前环境下占几个字节。 3、举例说明: 例子1:char str[] = "hello"; sizeof(str) //元素所占的字节数,也就是数组的大小 占6个字节 sizeof(str[0]) //第0个元素,第0个元素是char型的,所以 占1个字节 sizeof(str) //字符串的长度(不包含最后的\0), 占5个字节 例子2:char str[] = "hello"; char *p = str;//str做右值,相当于首元素的首地址,数组的元素是char型, //那么str就是char *,刚好匹配 sizeof(p) //p本身是一个指针变量,跟p指向的变量一点关系没有;只是一个char *指针的长度, //32位系统上所有的指针的长度都是4 sizeof(*p) //p所指向的变量,p所指向的变量是char型的,相当于sizeof(char) 自然是1 strlen(p) //相当于strlen

strlen与sizeof区别(转载)

非 Y 不嫁゛ 提交于 2020-02-01 01:49:11
#include "stdio.h" #include "string.h" void main() { char aa[10]; printf("%d",strlen(aa)); printf("%d",sizeof(aa)); } 程序运行得到结果是strlen(aa)=15.sizeof(aa)=10;这是怎么回事呢?strlen是有效字符串的长度,不包含‘\0’,与初始化有关系,而sizeof与初不初始化没有关系。下面我们看看它们的区别吧(以下都是在网上查的) strlen(char*)函数求的是字符串的实际长度,它求得方法是从开始到遇到第一个'\0',如果你只定义没有给它赋初值,这个结果是不定的,它会从aa首地址一直找下去,知道遇到'\0'停止。 char aa[10];cout<<strlen(aa)<<endl; //结果是不定的 char aa[10]={'\0'}; cout<<strlen(aa)<<endl; //结果为0 char aa[10]="jun"; cout<<strlen(aa)<<endl; //结果为3 而sizeof()函数返回的是变量声明后所占的内存数,不是实际长度。 sizeof(aa) 返回10 int a[10]; sizeof(a) 返回40 1.sizeof操作符的结果类型是size_t

c++模板杂谈

痞子三分冷 提交于 2020-02-01 01:35:38
说白了,模板就是搭个函数,类的框架,具体实现的时候往里面填充内容 函数型框架----俗气的比大小 #include <iostream> #include<string.h> using namespace std; template <class TYPE> TYPE returnmax(TYPE x, TYPE y) { return (x>y)?x:y; } char* returnmax(char* x,char* y) { return (strcmp(x,y)<0)?x:y; } int main() { cout << "Hello World!" << endl; char* chorum2 ="你你你你要跳舞吗"; char* chorum1 ="每当浪潮来临的时候,你会不会也伤心"; cout<<returnmax(chorum1,chorum2)<<endl; cout<<returnmax(99,888)<<endl; return 0; } 输出结果: 来源: https://www.cnblogs.com/saintdingspage/p/12247418.html

C++读写文件总结 .

丶灬走出姿态 提交于 2020-02-01 00:22:03
在C++中如何实现文件的读写? 一、ASCII 输出 为了使用下面的方法, 你必须包含头文件<fstream.h>(译者注:在标准C++中,已经使用<fstream>取代< fstream.h>,所有的C++标准头文件都是无后缀的。)。这是 <iostream.h>的一个扩展集, 提供有缓冲的文件输入输出操作. 事实上, <iostream.h> 已经被<fstream.h>包含了, 所以你不必包含所有这两个文件, 如果你想显式包含他们,那随便你。我们从文件操作类的设计开始, 我会讲解如何进行ASCII I/O操作。如果你猜是"fstream," 恭喜你答对了! 但这篇文章介绍的方法,我们分别使用"ifstream"?和 "ofstream" 来作输入输出。 如果你用过标准控制台流"cin"?和 "cout," 那现在的事情对你来说很简单。 我们现在开始讲输出部分,首先声明一个类对象。 ofstream fout; 这就可以了,不过你要打开一个文件的话, 必须像这样调用ofstream::open()。 fout.open("output.txt"); 你也可以把文件名作为构造参数来打开一个文件. ofstream fout("output.txt"); 这是我们使用的方法, 因为这样创建和打开一个文件看起来更简单. 顺便说一句, 如果你要打开的文件不存在,它会为你创建一个,

java学习class4

不打扰是莪最后的温柔 提交于 2020-01-31 13:06:36
一. 课程作业 01 (1)使用组合数公式利用n!来计算组合数   A.设计思想   1. 输入 k的值   2.利用已有的函数得到阶乘的数值   3.相除得到结果,输出结果   B.程序流程图   C.源程序代码 1 /*本类用来计算组合数公式:C(k,n) = n!/(k!*(n-k)!) 2 * 实验步骤: 3 * 1.输入k的值 4 * 2.利用已有的函数得到阶乘的数值 5 * 3.相除得到结果,输出结果 6 * */ 7 package class4; 8 9 import java.math.BigInteger; 10 import java.util.Scanner; 11 12 public class CombinationNumberFormula 13 { 14 public static void main(String[] args) 15 { 16 Scanner in=new Scanner(System.in); 17 18 int k,n; 19 //输入要进行计算的k和n的值 20 System.out.print("请输入正整数k:"); 21 k=in.nextInt(); 22 System.out.print("请输入正整数n:"); 23 n=in.nextInt(); 24 25 //对数值进行校验 26 if(k>n||k<0|

Python C/C++ 拓展使用接口库(build-in) ctypes 使用手册

好久不见. 提交于 2020-01-31 09:28:33
Python C/C++ 拓展使用接口库(build-in) ctypes 使用手册 ctypes 是一个Python 标准库中的一个库.为了实现调用 DLL,或者共享库等C数据类型而设计.它可以把这些C库包装后在纯Python环境下调用. 注意:代码中 c_int 类型其实只是 c_long 的别名,在32位系统中他们被定义为相同的数据类型. 1.1 加载动态链接库 ctypes 可以导出 cdll,在windows上则为 windll和oledll 究竟什么是 cdll,windll和oledll? 他们是DLL生成时的 调用约定 (不同语言生成的dll也会有细微差别). 这样来说用cdll方法导出DLL中的方法是使用cdecl方式的,windll方法则是stdcall方式的,oledll下面再具体解释.也可以查阅官方说法 CDLL:代码方式 cdecl 。 WINDLL:代码方式win32 stdcall 。 oledll使用win32调用代码方式 且返回值是windows里返回的hresult值,双字节的值说明函数执行结果,其最高bit位为0则执行成功,1则为执行失败。详细见http://www.blogjava.net/JAVA-HE/archive/2010/01/04/308134.html。 cdecl和stdcall异同,参数入栈顺序均是从右向左

课程作业02-1-课后作业1-(3、4)汉诺塔、回文数

£可爱£侵袭症+ 提交于 2020-01-31 07:25:04
3.1程序设计思想:调用递归函数,终止条件为参数N=1;移动盘子时,利用两个函数,将盘子移动,利用中间的b柱子作为跳板,递归函数求出具体步骤,引用另一个函数具体输出盘子移动的步骤. 3.2源程序代码: 1 //信1605-3 20163429 刘瑞欣 2 import java.util.Scanner; 3 public class Digui 4 { 5 static private int number = 0; 6 public static void main(String[] args) 7 { 8 Scanner in = new Scanner(System.in ); 9 char A = 'A'; 10 char B = 'B'; 11 char C = 'C'; 12 System.out.println("输入盘子数"); 13 int num = in.nextInt(); 14 solveHanoiTower(num,A,B,C); 15 in.close(); 16 } 17 private static void move(int num,char start,char end) 18 { 19 number++; 20 System.out.println("第"+number+"步操作是将盘子从:"+start+"-->"+end); 21 }

字符串的坑点和一些读入输出操作

此生再无相见时 提交于 2020-01-31 02:09:48
坑点: 1:头文件一定别忘了 2:字符数组和字符串区别很大, 有以下几个区别和相同之处: (1):他们默认输入都是从0开始。 (2):如果用字符串常量来初始化字符数组,那数组的实际长度会比一个一个输入多一个,用来存储‘\0’结束符。 比如如果定义一个字符数组 char c[]={"hh,233"}.那这个字符串的长度就是6. 而如果这样定义 char c[]="hh,233"那就是7,因为这是一个字符常量要加一位结束符。 多说一句,C++数组即使没有任何东西,所占的字节数却还是有的。 (3):最重要的一点,字符串不能用scanf读入,但是字符数组可以用scanf进行读入一整个字符数组。 比如以下这个例子: ``` char s1[100010]; string s2; scanf("%s",s1);//不能读入s2,且s1前不能加取地址符。为什么呢,因为数组有一个特点:他的数组名有两个功能,它既是数组名又是字符数组的第一位的地址。所以前面可以不加取地址符。 ``` C语言中没有专门的字符串变量,如果要将一个字符串存放在变量中,必须使用字符数组,即用一个字符型数组来存放一个字符串,数组中每一个元素存放一个字符。 <1> 定义: char c[10] 字符型与整型互相通用,因此 int c[10] 也可以定义字符数组。但由于两种类型分配字节不同, 用整型来定义会浪费空间,

栈溢出练习(1)

删除回忆录丶 提交于 2020-01-31 00:56:28
具体原理参考: ctf-wiki 测试文件: 点击下载 栈溢出 原理 栈溢出的基本前提是 程序必须向栈上写入数据。 写入的数据大小没有被良好地控制。 例题 源码: #include <stdio.h> #include <string.h> void success() { puts("You hack me."); } void vulnerable() { char s[12]; gets(s); puts(s); return; } int main(int argc, char **argv) { vulnerable(); return 0; } 命令: gcc -m32 -fno-stack-protector -no-pie test.c -o test1 -m32:编译为32位文件 -fno-stack-protector:关闭堆栈溢出保护 -no-pie:关闭地址随机化 环境 如果提示: /usr/include/stdio.h:27:10: fatal error: bits/libc-header-start.h: 没有那个文件或目录 下载支撑文件: sudo apt-get install gcc-multilib g+±multilib module-assistant 分析 检测文件: 需要了解在32位程序中,调用函数的过程: 函数返回地址入栈-

数据库—SQLite3

梦想的初衷 提交于 2020-01-30 22:19:23
一、数据库的概念   数据库是数据库管理系统管理与控制之下,存放在存储介质上的数据集合。 二、常用的数据库   大型数据库   Oracle关系数据库、sun公司的DB2数据库   中型数据库   Server数据库,微软   小型数据库   MySQL,sun公司 三、基于嵌入式的数据库   基于嵌入式的数据库主要有:SQLite 、Firebird、Brekeley DB、 eXtremeDB   SQLite关系型数据库,体积小,支持ACID事务   Firebird是关系型数据库,功能强大,支持存储过程,SQL兼容等   Berkeley中无数据库服务器概念,它的程序直接连接到应用程序中   eXTREmeDB是内存数据库,运行效率高 四、SQLite基础 五、创建数据库   安装:sudo apt-get install sqlite3 六、数据库常用命令   1、系统命令   以‘ . ’开头的命令    .help 帮助 .quit 退出 .exit 退出 .databases 查看打开的数据库    .table 查看当前数据库下的表格   2、SQL命令   以分号结尾    1、 创建 一张数据库表 stu   create table stu(id integer , name char , score integer);    2、 查看所有表的创建语句 :