
本文共 2318 字,大约阅读时间需要 7 分钟。
1.使用memcpy_s()代替memcpy()
memcpy_s(void *dest, size_t destMaxLen, const void *src, size_t count);
// destMaxLen表示目标地址的字符个数,目标缓冲区长度,可以用sizeof获取
// count表示需要拷贝的字符串长度,可以用sizeof获取
void *memcpy(void *str1, const void *str2, size_t n);
2.字符串长度
int length = strlen(chars);
int strlen(char *s);
3.const int* / int* const / int const*区别
①const int*
int y = 1;
const int *a = y;// 声明一个指向常量的指针a,不能用*a来修改y的值
该声明指出,a指向一个const int,这里为1,因此不能使用a来修改这个值。换句话说,*a的值为const,不能被修改,但是a的声明并不意味着它指向的值实际上就是一个常量,而只是意味着对a而言,这个值是常量。a指向y,而y不是const,可以通过y变量来修改y的值,但不能使用a指针来修改。
②int const*
int const* 与 const int*没有区别
③int* const
int i1=30;
int i2=40;
int* const p=&i1;
//p=&i2; 错误的。p不能再指向另一个新地址了。
i1=80; //这里能用*p=80来代替,即可以通过*p修改i1的值。
printf("%d",*p);
分析:此时p的值不能被赋值修改了,只能永远指向初始化时候的内存地址。并且可用*p修改i1的值了。
4. memset_s
memset_s(void * dest,rsize_t destsz,int ch,rsize_t count);
destsz 目标字符串的大小,ch 要填充的字节,count 要填充的字节数;
示例:
char str[] = "asdfvgghhnn";
memset_s(str, sizeof(str), 'a', 5); //str变为“aaaaagghhnn”
5. scanf_s (“%s”, buffer, length);
比scanf安全,添加了边界检查,length指定了读取的长度
6.C语言定义结构体
//此声明声明了拥有3个成员的结构体,分别为整型的a,字符型的b和双精度的c
//同时又声明了结构体变量s1 //这个结构体并没有标明其标签 struct { int a; char b; double c; } s1; //此声明声明了拥有3个成员的结构体,分别为整型的a,字符型的b和双精度的c //结构体的标签被命名为SIMPLE,没有声明变量 struct SIMPLE { int a; char b; double c; }; //用SIMPLE标签的结构体,另外声明了变量t1、t2、t3 struct SIMPLE t1, t2[20], *t3; //也可以用typedef创建新类型 typedef struct { int a; char b; double c; } Simple2; //现在可以用Simple2作为类型声明新的结构体变量 Simple2 u1, u2[20], *u3;
7.C语言使用哈希表
C语言中使用哈希表,定义结构体
struct hashTable {
int key;
int val;
/* 使用uthash代码时只需要包含头文件"uthash.h"即可 */
UT_hash_handle hh;
};
/* 初始化键值对数量为空的哈希表 */
struct hashTable* hashtable = NULL;
/* 查找,找不到tmp为NULL,找到则tmp指向一个键值对 */
HASH_FIND_INT(hashtable, &ikey, tmp);
/* 插入新的键值对 */
HASH_ADD_INT(hashtable, key, tmp);
8. scanf()与gets()
①scanf()所在头文件:stdio.h
语法:scanf(“格式控制字符串”,变量地址列表);
接受字符串时:scanf(“%s”,字符数组名或指针);
②gets()所在头文件:stdio.h
语法:gets(字符数组名或指针);
两者在接受字符串时不同点:
scanf不能接受空格、制表符Tab、回车等;
而gets能够接受空格、制表符Tab和回车等;
scanf:当遇到回车,空格和tab键会自动在字符串后面添加’\0’,但是回车,空格和tab键仍会留在输入的缓冲区中。
gets:可接受回车键之前输入的所有字符,并用’\0’替代 ‘\n’,回车键不会留在输入缓冲区中。
举例:从键盘输入字符串 asd df时,遇到空格,scanf()就认为输入结束了,所以a中存放的字符串是 ‘asd\0’。从键盘输入字符串 asd df时,gets()遇到’\n’才认为是结束输入了,所以a中存放的是’asd df\0’。
9. printf()和puts()的区别
①相同点:两者都属于stdio.h这个头文件,都能输出字符串
②不同点:puts()在输出字符串时会将’\0’自动转换成’\n’进行输出,也就是说,puts方法输出完字符串后会自动换行。
----
不断更新中……
----
转载地址:https://blog.csdn.net/Fan_z_0802/article/details/109105223 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
关于作者
