IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 任务四------结构体,内存,字符串 -> 正文阅读

[C++知识库]任务四------结构体,内存,字符串

1、memcpy函数

memcpy()函数指的是内存拷贝函数,函数原型为void *memcpy(void *destin, void *source, unsigned n);函数的功能是从源内存地址的起始位置开始拷贝若干个字节到目标内存地址中,即从源source中拷贝n个字节到目标destin中。

代码实现:

void *memcpy(void *destin, void *source, unsigned n)
{
	if((destin==NULL)||(source==NULL))
	{
		return NULL;
	}   
	else if(destin==source)
	{
		return source;
	}
	else
	{
		char* a=(char*)destin;
		char* b=(char*)source;
		while(n--)
		{
			*a=*b;
			a++;
			b++;
		}
		return destin;
	}
}

函数的使用:

#include<stdio.h>
void *memcpy(void *destin, void *source, unsigned n)
{
	if((destin==NULL)||(source==NULL))
	{
		return NULL;
	}   
	else if(destin==source)
	{
		return source;
	}
	else
	{
		char* a=(char*)destin;
		char* b=(char*)source;
		while(n--)
		{
			*a=*b;
			a++;
			b++;
		}
		return destin;
	}
}
int main()
{
	char str1[10]="aaaaaa";
	char str2[10]="123456";
	int n=3;
	memcpy(str1,str2,n);
	printf("%s\n",str1);
	return 0;
}

输出结果是:123aaa

2、memset()函数

这个函数是计算机中C/C++语言初始化函数。作用是将某一块内存中的内容全部设置为指定的值, 这个函数通常为新申请的内存做初始化工作。函数原型为void *memset(void *s, int ch,?int n)。

代码实现:

void *memset(void *s,int ch,int n)
{
	char *a=(char *)s;
	while(n--)
	{
		*a=ch;
		a++;
	}
	return s;
}

?函数使用示例:

#include<stdio.h>
void *memset(void *s,int ch,int n)
{
	char *a=(char *)s;
	while(n--)
	{
		*a=ch;
		a++;
	}
	return s;
}
int main()
{
	char s[100]="hello world!";
	memset(s,'a',4);
	printf("%s\n",s);
	return 0;
}

输出结果为:aaaao world

但是这个函数平时用于初始化,比如memset(s,0,100),就是将字符串s中的值都初始化为0。

3、malloc()函数

函数原型为:void *malloc(unsigned size)。函数功能是向系统申请大小为size的连续内存块,然后把首地址返回,如果申请不成功,返回NULL。

函数mallo()的返回值类型为void*(这是通用指针的一个重要用途),它可以指向任意类型的变量,在具体使用中,将函数malloc()的返回值强制转换到特定指针类型,赋值给一个指针。

函数的使用:

#include<stdio.h>
#include<stdlib.h>
int main()
{
	int n;
	int *p=NULL;
	printf("please enter array size:");
	scanf("%d",&n);
	p=(int *)malloc(n*sizeof(int));
	if(p==NULL)
	{
		printf("申请内存失败");
		exit(1);//exit(1):非正常运行导致退出程序;exit(1):正常运行程序并退出程序; 
	}
	return 0;
}

4、calloc()函数

这个函数原型为:void *calloc(unsigned num,unsigned size)。函数功能为向系统申请连续的num个size大小的内存块,然后把首地址返回,如果申请不成功,则返回NULL。calloc()函数与malloc()函数最重要的区别是malloc()申请的空间是随机的,而calloc()函数申请空间之后并对所申请的整个空间初始化为0;

#include<stdio.h>
#include<stdlib.h>
int main()
{
	int *p1=(int *)malloc(20*sizeof(int));
	int *p2=(int *)calloc(20,sizeof(int));
	printf("malloc函数所申请的空间的值为:\n");
	for(int i=0;i<20;i++)
	{
		printf("%d ",*p1++);
	}
	printf("\n");
	printf("calloc函数所申请的空间的值为:\n");
	for(int i=0;i<20;i++)
	{
		printf("%d ",*p2++);
	}
	printf("\n");
	return 0;
}

?calloc()函数的自实现

void *my_calloc(unsigned int n,unsigned int size)
{
	unsigned k=n*size;
	int *p=(int *)malloc(k);
	memset(p,0,k);
}

自定义函数的使用:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
void *my_calloc(unsigned int n,unsigned int size)
{
	unsigned k=n*size;
	int *p=(int *)malloc(k);
	memset(p,0,k);
}
int main()
{
	int *p1=(int *)malloc(20*sizeof(int));
	int *p2=(int *)my_calloc(20,sizeof(int));
	printf("malloc函数所申请的空间的值为:\n");
	for(int i=0;i<20;i++)
	{
		printf("%d ",*p1);
		p1++;
	}
	printf("\n");
	printf("my_calloc函数所申请的空间的值为:\n");
	for(int i=0;i<20;i++)
	{
		printf("%d ",*p2++);
	}
	printf("\n");
	return 0;
}

输出结果:

5、itoa()函数

函数原型: char *(int n,char *str,int radix)。函数功能是将数值转换成字符串,其中radix是转换成相应的进制。

使用示例:

#include<stdio.h>
#include<stdlib.h>
int main()
{
	int n=1234;
	char str[100];
	itoa(n,str,2);
	printf("数字:%d,字符串:%s\n",n,str);
	itoa(n,str,8);
	printf("数字:%d,字符串:%s\n",n,str);
	itoa(n,str,10);
	printf("数字:%d,字符串:%s\n",n,str);
	itoa(n,str,16);
	printf("数字:%d,字符串:%s\n",n,str);
	return 0;
}

输出结果:

6、atoi函数

这个函数的原型为:int atoi(const char *nptr);功能是将字符串转化成整型。

使用示例:

#include<stdio.h>
#include<stdlib.h>
int main()
{
	char str[]="12345.67";
	int n=atoi(str);
	printf("n=%d\n",n);
	char a[]="10";
	char b[]="20";
	int m=atoi(a)+atoi(b);
	printf("m=%d\n",m);
	return 0;
}

输出n=12345? ? m=30.

7、atof()函数

这个函数是将字符串转化成浮点数,函数原型为:double atof(const char *nptr)。

使用示例:

#include<stdio.h>
#include<stdlib.h>
int main()
{
	char str[]="12345.67";
	double n=atof(str);
	printf("n=%lf\n",n);
	return 0;
}

输出结果为:n=12345.670000.

8、strtod()函数

函数功能是将字符串转换成浮点数,函数原型:double strtod(const char *nptr,char **endptr).

strtod()会扫描参数nptr字符串,跳过前面的空格字符,直到遇上数字或正负符号才开始做转换,到出现非数字或字符串结束时('\0')才结束转换,并将结果返回。若endptr不为NULL,则会将遇到不合条件而终止的nptr中的字符指针由endptr传回。参数nptr字符串可包含正负号、小数点或E(e)来表示指数部分。如123.456或123e-2。

#include<stdio.h>
#include<stdlib.h>
int main()
{
	char *endptr;
	char a[]="1234.567";
	char b[]="234.4wers";
	char c[]="232.25e4";
	printf("%lf\n",strtod(a,NULL));
	printf("b=%lf\n",strtod(b,&endptr));
    printf("endptr=%s\n",endptr );
    printf("c=%lf\n",strtod(c,NULL));
	return 0;
}

9、sprintf()函数

这个函数原型为:int sprintf( char *string, const char *format [, argument,...] )。函数功能是把格式化的数据写入某个字符串中。

string是字符数组名,format是格式化字符串。sprintf函数的功能是将格式之后的字符串输出到目的字符串中,而printf函数是将格式化之后的字符串输出到屏幕上

#include<stdio.h>
int main(void)
{
   char  string[200];
   char s[]="hello,wolrd!";
   sprintf(string,"String:%s",s);//把字符串s(格式化后的字符串)中的内容打印到目的字符串string(字符数组)中
   printf("%s\n",string);
   return 0;
}

?

?10、sscanf()函数

这个函数的功能是读取格式化的字符串中的数据,函数原型为:int sscanf(const char *string?const char *format [, argument,...] )。scanf与sscanf都是用于输入的,只不过scanf以屏幕为输入源,sscanf以目的字符串为输入源。

#include<stdio.h>
int main(void)
{
   char  string[200];
   char s[]="hello,wolrd!";
   sscanf(s,"%s",string);//将格式化后的字符串s输入到目的字符串string中
   printf("%s\n",string);
   return 0;
}

?11、fgets()函数

fgets函数功能为从指定的流中读取数据,每次读取一行。其原型为:char *fgets(char *str, int n, FILE *stream);从指定的流 stream 读取一行,并把它存储在 str 所指向的字符串内。当读取 (n-1) 个字符时,或者读取到换行符时,或者到达文件末尾时,它会停止,具体视情况而定。

scanf()函数和gets()函数和fgets()函数读取字符串的异同

scanf()在读取字符串的时候遇到空白符(空格键、换行符、制表符)读取结束。

gets()在读取字符串的时候遇到换行符读取结束,gets()读取换行符之前(不包括换行符)的所有字符,在这些字符后添加一个空字符(\0)

fgets()在读取字符串的时候也是遇到换行符读取结束,但是fgets()函数与gets()函数有很多不同,比如:fgets()函数需要第二个参数来说明最大读入字符数,如果这个参数值为n,fgets()会读取最多n-1个字符或者读到换行符,由二者中最先满足的那一个终止输入,如果fgets()读到换行符,就会把它存到字符串里,而不是像gets()那样丢弃它。并且它还需要第三个参数来说明读取哪一个文件。从键盘上读取数据时,可以使用stdin作为该参数。

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-12-10 10:52:59  更:2021-12-10 10:53:56 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 11:26:19-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码