![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C语言
春已暖花已开
这个作者很懒,什么都没留下…
展开
-
memcpy与malloc函数
1.memcpymemcpy指的是c和c++使用的内存拷贝函数,memcpy函数的功能是从源src所指的内存地址的起始位置开始拷贝n个字节到目标dest所指的内存地址的起始位置中。拷贝的是n个字节,但是必须在dest的范围之内。函数原型为void *memcpy(void*dest, const void *src, size_t n);#include <stdlib.h>#inc...原创 2018-06-07 17:34:25 · 1572 阅读 · 0 评论 -
C语言字符串while指针模型(很重要)
查找字符串,使用while循环int main(){ const char *p = "1234abcd3rfthabcdrtyabcdsksssssabcd"; int count = 0; printf("%s\n",p); while(p = strstr(p, "abcd")) { count ++; p = p + s...原创 2018-09-16 18:31:11 · 2105 阅读 · 0 评论 -
C语言const
理解const的关键是一定要清楚,指针变量和它所指向的内存空间变量,是两个完全不同的概念。看const 是放在*的左边还是右边,我们知道*是取内容符号,放在左边则修饰的是内存空间变量,放在右边则修饰的是指针变量。在一个函数中,如果我们不需要对一个入口参数做修改,也就是这个这个入口参数不做左值的时候,我们最好使用const修饰一下。int main(){ const int a;...原创 2018-09-16 21:20:35 · 5220 阅读 · 0 评论 -
memcpy()
使用memcpy()函数出现如下错误:int main(){ int *chunk = (int *)malloc(10*sizeof(int)); //chunk[5] = 20; for(int i = 0;i<10;i++) { chunk[i] = i; } memcpy(chunk ,0 , 10*sizeof(int)); printf("...原创 2018-09-10 13:34:37 · 5922 阅读 · 0 评论 -
字符串反转&&char *p 和char a[]区别
字符串反转函数int main03(){ char buff[] = "qwertyuio"; char *p = buff; char *p1 = buff + strlen(buff) -1; printf("p1:%s\n",p1); while(p < p1) { char c = *p; *p = *p1; *p1 = c; ...原创 2018-09-23 17:11:04 · 683 阅读 · 0 评论 -
避免野指针&&间接赋值
/**************************避免产生野指针的三个步骤。1.定义指针时候,初始化为NULL2.释放指针所指向的内存空间的时候,判断是不是NULL,避免重复释放。3.释放指针所指向的内存空间后,把指针重置为NULL。************************/int main01(){ int *p =NULL; P = (int *)m...原创 2018-09-23 17:22:55 · 307 阅读 · 0 评论 -
#ifdef __cplusplus
看到一篇总结很到位的文章,记录一下。 时常在cpp的代码之中看到这样的代码:#ifdef __cplusplus extern "C" { #endif//一段代码#ifdef __cplusplus } #endif 这样的代码到底是什么意思呢?首先,__cplusplus是cpp中的自定义宏,那么定义了这个宏的话表示这是一段cpp的代码,也就是说,上面的代码的含...转载 2018-09-15 16:01:51 · 154 阅读 · 0 评论 -
全局变量和局部变量初始化问题
变量需要不需要初始化是根据需要来进行的。全局变量有时也需要初始化,而局部变量其实大部分时间都没有初始化。不要把赋初值与初始化混淆了:初始化是由编译器做的,形成可执行文件后,那些变量的值就在软件文件中放着,执行程序时直接使用了;而赋初值是由C/C++代码实现的,程序开始执行后才给变量赋的值。只是全局变量如果不显式初始化,那么编译时由编译器自动初始化为0,而编译器对局部变量是否有值视而不见,所以在...原创 2018-09-29 11:34:35 · 2520 阅读 · 0 评论 -
system返回值
例:status = system("./test.sh");1、正确退出后。还需要再判断,操作成功或者操作失败。2、错误退出。1、先统一两个说法:(1)system返回值:指调用system函数后的返回值,比如上例中status为system返回值(2)shell返回值:指system所调用的shell命令的返回值,比如上例中,test.sh中返回的值为shell返回值。...转载 2019-02-18 15:48:55 · 5354 阅读 · 1 评论 -
snprintf的使用
函数定义:int snprintf(char*str, size_t size,constchar*format, ...);函数说明:最多从源串中拷贝size-1个字符到目标串中,然后再在后面加一个0。所以如果目标串的大小为size的话,将不会溢出。函数返回值:若成功则返回欲写入的字符串长度,若出错则返回负值。返回值并不是真正写入字符串的大小。解释如下:size是限定...原创 2019-02-14 14:28:05 · 12529 阅读 · 1 评论 -
调用memcpy函数前未初始化缓冲区
3.9 调用memcpy函数前未初始化缓冲区代码示例int main(){ char buffer[10]; memcpy(buffer , "hello wo" , 3); printf("buffer=%s\n", buffer); return 0; } 现象&后果运行程序,发现buffer打印出的内容除了"he...原创 2019-02-14 14:52:14 · 1200 阅读 · 0 评论 -
strlen()和sizeof的区别&数组和指针
从入口参数接过来的数据最好定义个临时变量,做个缓冲,不要轻易修改原地址的值,要引进一个辅助的指针变量把形参接过来,很重要。一定要清楚指针在内存中的指向,不然会指向一个错误的地址。void get(char *from, char *to){char *myfrom = from;char *myto = to;}strlen是函数,字符串长度,不包括停止符。而sizeof则是内存...原创 2018-09-16 14:02:33 · 2635 阅读 · 0 评论 -
C语言中函数返回字符串的四种方法
https://www.cnblogs.com/qingergege/p/6496683.html在讨论着四种方法之前,首先要对函数有一个简单的认识,无论是在形实结合时,还是在return语句返回时,都有一个拷贝的过程。你传进来的参数是个值,自然函数在工作之前要把这个值拷贝一份供自己使用,你传进来的是个地址,函数也就会拷贝该地址供自己使用。同样return返回时,如果返回一个值,函数会将该值拷...转载 2018-08-27 13:55:53 · 3480 阅读 · 0 评论 -
deprecated conversion from string constant to ‘char*’ [-Wwrite-strings]
deprecated conversion from string constant to ‘char*’ [-Wwrite-strings]char *背后的含义是:给我个字符串,我要修改它。而理论上,我们传给函数的字面常量是没法被修改的。所以说,比较和理的办法是把参数类型修改为const char *。这个类型说背后的含义是:给我个字符串,我只要读取它。...原创 2018-06-22 15:57:58 · 1022 阅读 · 0 评论 -
C语言之malloc函数
1、函数原型及说明:void *malloc(long NumBytes):该函数分配了NumBytes个字节,并返回了指向这块内存的指针。如果分配失败,则返回一个空指针(NULL)。关于分配失败的原因,应该有多种,比如说空间不足就是一种。void free(void *FirstByte): 该函数是将之前用malloc分配的空间还给程序或者是操作系统,也就是释放了这块内存,让它重新得到自由。2...转载 2018-06-09 21:11:49 · 437 阅读 · 0 评论 -
野指针以及c++使用指针注意点
避免野指针的产生“野指针”的成因主要有:1)指针变量没有被初始化。任何指针变量刚被创建时不会自动成为NULL指针,它的缺省值是随机的,它会乱指一气。所以,指针变量在创建的同时应当被初始化,要么将指针设置为NULL,要么让它指向合法的内存。char *p; //此时p为野指针 2)指针p被free或者delete之后,没有置为NULL,让人误以为p是个合法的指针.char *p=new char[1...转载 2018-07-08 17:29:30 · 377 阅读 · 0 评论 -
内存四区
注:一个程序只建立一个内存四区,所有函数共用这个内存四区。内存四区如下:操作系统给C/C++编写的程序分配内存,通常将分配的内存划分为以下四个区域:1.栈区:存放局部变量,用完由操作系统自动释放2.堆区:动态分配给程序的内存区域,由程序员手动释放3.数据区:分为两种:(1)常量区:存放常量,一般是字符串常量(2)全局区/静态区:存放全局变量和静态变量4.代码区:存放可执行代码的区域...转载 2018-07-08 20:37:20 · 280 阅读 · 0 评论 -
static
一,static全局变量 当一个进程的全局变量被声明为static之后,它的中文名叫静态全局变量当static修饰全局变量或者函数时,不是为了限制其存储方式,而主要是为了限制该全局变量或者函数的作用域仅限于本文件,所以又称为内部函数。在函数的返回类型前加上关键字static,函数就被定义成为静态函数。函数的定义和声明默认情况下是extern的,但静态函数只是在声明他的文件中可见,不能被其他...原创 2018-07-08 22:09:31 · 132 阅读 · 0 评论 -
当遇到error: stray '\241' in program错误的解决方法
报错的意思是c/c++中的产生了编译错误。该错误是指源程序中有非法字符,需要将非法字符去掉。一般是由于编程者(不用程序员这个名词是因为这种错误太低级)使用中文输入法或者从别的地方直接复制粘贴代码造成的。代码中出现了中文空格,中文引号, 各种中文标点符号都会出现,简单修改一下就OK了。解决方法:1.把出错行的空格及其前后空格删掉重新打一下试试。2.把明显和其他标点符号颜色不同的改掉。...转载 2018-07-17 17:29:19 · 24272 阅读 · 1 评论 -
C语言自己总结
C语言小白,以下内容只是自己做个记录,方便查看。1.指针加1之后会指向下一个数据的位置,并不会是地址加1。输出aa 为b的值,20。在memcpy(void *des, void *src , int len);地址做偏移只根据数据个数进行偏移即可。指针只是一个地址,占用几个字节,与C语言和定义的类型无关,与系统位数有关,比如32位系统占用4个字节,我的64位系统占用8个字节。#include &...原创 2018-07-07 22:29:25 · 203 阅读 · 0 评论 -
malloc()函数和数组
我们需要访问malloc函数所存入的数据,一般可以使用地址偏移的方式比如uint64_t *chunk = (uint64_t *)malloc(65536);如果要访问第一个数据就是*(chunk) 如果访问第二个数据就是*(chunk +1) 千万别写成(*chunk+8)。但是这种方式对于循环遍历不方便。为了简化访问方法,C语言使用了一种简单的对指针运算——[ ]下标运算。[ ]...原创 2018-07-20 20:11:38 · 11145 阅读 · 1 评论 -
格式说明符
#include <stdio.h>#include <stdlib.h>int main(){ int a = 100; printf("a = %d\n",a); printf("a = %u\n",a); printf("a = %c\n", a); printf("a = %x\n", a); printf(&qu原创 2018-07-20 22:50:00 · 798 阅读 · 0 评论 -
引用
void swap(int x, int y){ int t = x; x = y; y = t;}void main(){ int a=4,b=6; swap(a,b); printf("a=%d b=%d\n", a, b);}输出结果为a =4,b=6 。a和b的值并没有如我们期望的发生改变。如果想要修改a和b的值只能通过修改...原创 2018-07-20 23:08:52 · 122 阅读 · 0 评论 -
给指针malloc分配空间后就等于数组吗?
转载地址:https://blog.csdn.net/qq_33834328/article/details/53284275首先回答这个的问题:严格的说不等于数组,但是可以认为它是个数组一样的使用而不产生任何问题。不过既然这样,那它应该算是个数组吧。所以,一般我们都用“动态数组”这种名字来称呼这种东西。要讲清楚这个东西,涉及到malloc函数,指针类型和“[ ]”下标运算。==...转载 2018-07-21 10:27:29 · 5391 阅读 · 7 评论 -
undefine error
在linux中编译出现undefine error的错误,一般是由于两个原因,第一个是在编译选项中添加-D_GNU_SOURCE 另一个是由于gcc和g++混合编译出现的错误,需要使用:#ifdef __cplusplusextern "C"{#endif#include "log.h"#ifdef __cplusplus}#endif注意__cplusplus是两个下划...原创 2019-03-10 17:10:18 · 526 阅读 · 0 评论