- 博客(124)
- 收藏
- 关注
原创 C语言位域定义与使用
字节的高位低位,是按照从左到右顺序,取各位操作时,先按照字节顺序,先取低字节再取高字节,即是反过来取的。而在每个字节内部,又是先取低位再取高位,也是反过来的。但是,在取完后放置时,却是需要再反一下,即先取的放高位,后取的放低位,即高低位翻转了!其实也是因为先取的是原数据的低位,后取的是高位,所以放的时候,也是从右往左放,所以最终结果是高低位和取的顺序是反的。b2是第一个字节的第7位到第5位,即0 1 1,但是结果却是110,即6。b3是第二个字节的低4位,即1 0 1 1,结果却是1101,即13。
2024-01-18 15:33:24
518
原创 VS报错:error:LNK2005 _main 已经在 *.obj 中定义
实际上,多年以来一直有个问题困扰我很久,总弄不明白,就是一般一个头文件对应一个源文件,但是,一些数据类型、宏定义等,在头文件中定义,在源文件中使用,同时,在其他文件也要使用,那么源文件必须嵌入这个头文件,其他文件也需要嵌入这个头文件。然后,一些变量,在源文件中定义,别的源文件需要使用,则,就需要在头文件中声明。这些变量,是在源文件中定义的,在头文件声明,其他源文件只需要嵌入头文件,即可使用。其实,这些数据类型和宏,完全可以在源文件定义,然后在头文件再声明,和变量、函数是一样的处理。试运行程序,没有问题。
2024-01-13 10:19:09
1336
原创 C语言:高地址和低地址、高字节与低字节、大小端模式的转换、存储顺序
和另外一篇栈的生长、存放顺序一样,一般描述栈的方向是相反的,即栈底在下,栈顶在上。注意大小端存储方式,简单讲小端是低字节低地址,高字节高地址,是顺的,大端是反的。另外,先后声明的变量,是先定义的存高地址,后定义的存低地址。数组,前面元素存低地址,后面高地址,也就是按地址增加存的。类、结构体的元素类似。
2024-01-11 10:22:26
597
原创 C语言堆栈地址定义
那么出栈方向是低地址向高地址,即,栈顶指针需要不断加,才能实现出栈(很多程序涉及到栈指针)但是高地址低地址是不变的,即栈底是高地址,栈顶是低地址,即栈增长方向是高地址向低地址。堆地址反过来,增长方向是从低地址向高地址。如果释放地址,则先释放高地址,再释放低地址。文章讲的很明白,但是一般,我们习惯栈底在下面,栈顶在上面,即和文章中反过来。
2024-01-10 14:46:03
511
原创 C读dat文件
c语言怎么读取dat数据 - 问答 - 亿速云 (yisu.com)c语言如何读取.dat文件-C语言-E安全 (easyaq.com)
2024-01-10 09:18:33
484
原创 C和C++代码混编时出现找不到C代码函数定义的问题
主函数是cpp文件,其他文件都是c文件,所以有上面题目。编译时,只要C++代码调用C代码就出现找不到函数定义问题。另一种解决办法是,将所有C源文件改为CPP文件。尝试将所有C头文件都在首尾加了。上面这篇文章讲得很明白了。
2024-01-10 09:16:12
739
原创 C语言深拷贝和浅拷贝问题
所以这在释放内存时会出问题,会导致原来拷贝结构体指针指向的动态内存没有指针指向它,也基本就无法释放了,后面如果涉及动态内存申请和释放,程序会报错。这里结构体里面的指针是指向了动态分配内存。其实就算是指向任何一个变量或者数组,拷贝结构体时都是浅拷贝,即,拷贝结构体的指针本身(值)被拷贝,也就是其指向被拷贝结构体指针指向的值,而不指向原来指向的值,原来指向的值就和这个指针脱离了。有些地方用结构体赋值代替memcpy结构体,结果是一样的,但是,个人认为,赋值不叫拷贝,应该就叫赋值,否则浅拷贝情况太多了。
2023-12-21 17:33:17
1217
原创 C语言IIR双向滤波
设计一个通用的双向滤波程序,包括滤波函数和数组逆序函数,包含可以和matlab对数据的写数据代码。设计一个0.5~1Hz的IIR滤波器,用巴特沃斯或者契比雪夫2,看零极点图是稳定的。可以得到滤波器系数a,b.
2023-11-29 15:48:57
638
原创 MATLAB中字符和字符串操作
字符和字符串相互转,很多时候还是需要的。如下面的代码,需要判断一系列ASCII码,其实是判断字符串,首先fread读到的是数组型,经dec2hec转字符数组,还需要string转字符串型,才更好判断,当然用字符数组也可以判断。
2023-11-24 13:58:19
946
原创 Git拉取远程仓库代码覆盖本地,也就是放弃本地修改
全部拉取远程仓库文件覆盖本地文件。如果单独需要覆盖某个文件,可以将.换成。但是亲测是无效的,并不能将本地不存在但远程仓库存在的文件取回来。说的最多的是用:git fetch --all。正确的是:git checkout .
2023-11-24 10:46:13
1918
原创 C语言 子函数调malloc申请内存返回给主函数使用——可行,但要注意!——修改、完全篇
一般情况,子函数中动态申请内存,将地址返回给主函数,理论上应该也是可以的,需要子函数返回动态内存地址,主函数实参是相应的地址变量即可。需要注意的是,需要传入二级指针,也就是主函数实参是指向地址变量的指针。那么实参即指向子函数内动态申请的内存,调用完后,需要释放内存,即释放实参即可。
2023-11-21 19:55:26
1160
原创 VS中修改解决方案名称和项目名称
8、在解决方案下有根据各平台生成的debug文件夹,里面的文件,可以先删除,因为里面的文件名还是旧的项目名,在项目重新生成时会再生成新的名称,但是旧名称文件不会删除,所以可以先全部删除,甚至删除debug文件夹,工程重新生成时,会自动生成这个文件夹。3、可以打开解决方案,即双击.sln文件,然后在vs中右键解决方案,选重命名,输入确定即可。7、打开.sln文件,将之前名称的工程移除(右键移除),然后添加现有项目,选重命名的解决方案文件夹下重命名的.vcxproj,重新生成,重新生成解决方案。
2023-11-18 12:10:27
2887
原创 C++堆内存错误:CRT detected that the application wrote to memory before start of heap buffer
C运行时出现这个错误,不会暂停到出错点,而是直接崩了。经检查,是free一个动态内存的指针出错。在写数据时,写到分配的动态内存地址以外,写的时候并不报错,但是在释放的时候就报这个错误。堆内存错误:应用程序在堆内存前写入了数据。堆是低地址到高地址写,反正前后都不能由应用程序写。暂时只碰到这个错误导致,应该还有其他情况也会报这个错。
2023-11-18 10:23:44
331
原创 Git拉取远程指定分支
但是其实主分支也是拉取下来了,其他分支也拉取下来了,只不过所需分支也拉取下来并且对应当前工作区的代码。如果想要只克隆指定分支还需要搭配 --single-branch 选项,这样我们就只会拉取到我们指定的分支,而不会拉取到其他远程分支了。通过这种方式克隆远程仓库除了指定的远程分支不是主干分支以外,还是会将远程的所有分支都拉取下来,并不能够起到减小克隆仓库体积的功能。-b选项搭配 --single-branch 选项只克隆指定分支。# 指定克隆远程分支 `/develop/branch_1`
2023-11-15 09:54:19
2478
原创 git 删除远程非主分支
本版本Gitlab没有设置按钮,所以不能在网页上删除项目。但是可以在本地使用上述命令来删除远程仓库中非主分支的分支。测试过不论在哪个分支操作都可以,只要想删除的branch-name没写错就行!这样,可以本地删除远程分支,也是不错的。
2023-11-14 20:27:27
191
原创 Git用pull命令后再直接push有问题
强行推送到远程仓库。1、用clone代替pull?是不是pull跳过了远程仓库映射到本地仓库,直接只是将远程仓库文件拉取到本地而已。说明本地仓库和远程仓库未建立关联(映射)。建议使用git remote add...然后就是在本地工作区增加所有文件及文件夹。2、用上面git remote add命令,即添加远程映射。git pull
2023-11-14 17:52:24
527
原创 Git新建分支
考虑1),直接新建分支,后面可以选择根据需要从两个分支拉,后面如果需要合并删除,用版本号来控制,也可以再合并删除。由于远程仓库,并未建立对应的新分支,即远程还没有这个分支,更没有将这个分支远程和本地仓库映射起来,所以要用以下形式,用本地仓库建立远程对应的仓库。另外,这里右上角也可以直接新建分支,但是要注意这里新建分支后,本地工作区需要重新拉取,才能将本地仓库和远程仓库的新建分支对应起来(映射上)。后续,如果再将本地仓库推送到远程仓库,则不需要再输入本地分支名和远程分支名了。甚至,连远程地址也不需要输入?
2023-11-14 17:33:57
132
原创 C语言:CRT detected that the application wrote to memory after end of heap buffer
检测到了堆内存被破坏,程序向堆内存前面的内存区域写入了内容。需要检查数组,特别是动态内存数组的访问和写入。即指针释放位置错误。应该是因为释放到系统内存区了。
2023-11-10 11:14:41
1677
原创 C语言 exit函数
需要注意的是,在程序中使用exit函数会立即强制结束程序,程序内部未处理的任何资源都将不能释放,也就可能导致内存泄漏。因此,在使用exit函数之前,需要先释放内存、关闭文件等操作。
2023-11-09 20:08:25
268
原创 解决VS编译报错C4996 ‘fopen‘: This function or variable may be unsafe. Consider using fopen_s instead...
添加这个宏即可。
2023-11-09 19:19:25
483
原创 C语言写txt文件和MATLAB 写txt文件
C语言,fopen打开txt文件,fprintf写数据,需要循环。//表示如果读取为空文件就正常退出。其中fread和fwrite其实都可以。
2023-11-09 13:24:52
345
原创 C语言 判断函数输入参数的个数
其实我是想在任意一个函数开始处就检测输入参数个数,想着和MATLAB一样可以缺省输入参数。比如一个函数可以有5个输入参数,前两个是必须的,后3个都可以缺省,缺省时会自动设置值。int main(int argc,char** argv) // char** argv也可以写成*argv[]但是貌似C语言中无此机制。
2023-11-09 10:14:46
534
原创 C语言perror
/ 假设当前路径无此文件。所以,第一个错误是自己强行报错,则只会打印输入字符串open,后面再说明系统无错误,即:No error。第二个perror才是真的打印出系统错误,即找不到文件。在自定义字符串后再打印出系统错误信息。用户自己强加的打印字符串,只会打印字符串,而不是在后面接错误信息。//结果:open:No such file or directory。主要是系统错误时才会打印错误信息。而不是用户自己定义报错就打印错误信息。
2023-11-09 10:06:34
187
原创 231108 C语言memset当第三个参数为0,即设置个数为零也不报错
if (sig_buf == NULL) {//判空。犹豫第三个参数为0会不会报错,测试不会。
2023-11-08 20:30:39
177
原创 C语言 memset
注意是按照字节赋值的。int型变量,当赋值0时,是没有问题的,但是赋值1,却按照每个字节都赋值1,最终结果错误。或者,用了memset后再将高字节置零?不能使用memset么?所以单独用memset是不行的?
2023-11-08 18:15:55
115
原创 231108 C语言else if和MATLAB elseif
注意C中没有elseif 也就是只有else if,作用和MATLAB中elseif一样,都是同一个分支下判断不同情况。而MATLAB中的else if 则是需要再取一层再分支的。
2023-11-08 17:46:39
118
原创 231108 C语言中是否可以函数内部动态申请内存,再传给外部变量?
自然,内部动态申请内存在函数执行结束时是需要销毁的。那么是否可以在销毁前将指针赋值给函数返回值?当然,函数返回值是一个同类型指针。是否可以返回一个指针,这个指针是函数内部动态申请内存的起始地址?
2023-11-08 17:21:20
55
原创 C语言字符串传入函数判断
用于⽐较str1和str2中的元素,如果相等就继续往后⽐较,如果提前发现不一样,就提前结束,第⼀个字符串⼤于第⼆个字符串,则返回⼤于0的数字,第⼀个字符串⼩于第⼆个字符串,则返回⼩于0的数字,num个字符都相等,就是相等返回0.函数原型:int strncmp ( const char * str1, const char * str2, size_t num );版权声明:本文为CSDN博主「故城山茶」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
2023-11-08 16:59:25
123
原创 一个可以在github上搜代码段的网站
Python项目源码-编程字典 常用Python模块, 这些模块源码,让你做项目像搭积木一样容易。 https://codingdict.com/sources/py/all记录一下。可以在站内搜各种语言或者模块的相关代码,并链接到github的项目。...
2022-01-18 16:44:26
199
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅