系统学习-C Reference--Cstring Cstdlib

memcpy memmove sizeof strcpy \0 strlen memchr memcmp strstr scanf gets printf puts strrchr strchr 
memstr 
转——————

 

memcpy memmove sizeof strcpy \0 strlen memchr memcmp strstr scanf gets printf puts strrchr

 

str开头的基本都看完了 1122复习一次。

strcasecmp用忽略大小写比较字符串. strncasecmp

一直纠结这段代码为什么跳不出来,后来才知道,原来是fgets会多吃一个回车。  然后fgets是堵塞的,先do,然后有输入了,才会去while里判断,所以不会跳出来。  然后fputs输出一个字符以后,自动会把指针往下跳一个位置,这些个细节,对于理解代码很重要啊。

感觉把代码复制到CODEBLOCK里运行很有必要。

codeblock里全速运行时,输出重定向到了窗口,直接点击ABORT关闭不行,会死机的。

 

 

 

C语言对字符串的操作有:

1、复制或者覆盖

memcpy copy block of memory

memmove move block of memory

strcpy copy string

 copy characters from string

2、连接或组合

concatenate strings

append characters from string

3、比较

compare two blocks of memory

compare two string

compare two stings using locale

compare characters of two strings

transform string using locale

4、搜索

locate character in block of memory

locate first occurrence of character in sting

strcspn get span until character in string

strrchr locate the last occurrence of character in string

strpbrk locate characters in string

 

5、求长度

 

printf  puts 输出字符串,  不同点: 
puts()在输出字符串时会将’\0’自动转换成’\n’进行输出,也就是说,puts方法输出完字符串后会自动换行。

scanf gets两者在接受字符串,   不同点:

scanf不能接受空格、制表符Tab、回车等;

而gets能够接受空格、制表符Tab和回车等;

scanf :当遇到回车,空格和tab键会自动在字符串后面添加’\0’,但是回车,空格和tab键仍会留在输入的缓冲区中。

gets:可接受回车键之前输入的所有字符,并用’\0’替代 ‘\n’.回车键不会留在输入缓冲区中

memcpy(person.name,myname, strlen(myname)+1);
memcpy ( &person_copy, &person, sizeof(person) );
puts输出字符串时要遇到'\0’也就是字符结束符才停止,如上面的程序加上一句 string[10]='\0';
1.与字符串函数strcpy区别:

  • memcpy与memmove都是对内存进行拷贝可以拷贝任何内容,而strcpy仅是对字符串进行操作。
  • memcpy与memmove拷贝多少是通过其第三个参数进行控制而strcpy是当拷贝至'\0'停止。

2.函数说明:         

  1. memcpy函数的功能是从源src所指的内存地址的起始位置开始拷贝N个字节到目标dst所指的内存地址的起始位置中。
  2. memmove函数的功能同memcpy基本一致,但是当src区域和dst内存区域重叠时,memcpy可能会出现错误,而memmove能正确进行拷贝。

与strcpy不同的是,memcpy会完成的复制n个字节,不会遇到字符串结束'\0'而结束

strrchr

return a pointer to the last occurrence of character in the C string str

 

 

const T、const T*、T *const、const T&、const T*& 的区别

 

 

 

 

http://blog.csdn.net/luoweifu/article/details/45600415  超级清楚讲的

 

 

 

 

2016-10-20

C++中new申请的内存, 可以用free释放吗

malloc/free,new/delete必需配对使用。
malloc与free是c++、c语言的标准库函数,new、delete是c++的运算符。它们都可用用申请动态内存和释放内存。对于非内部数据类型的对象而言,光用malloc/free无法满足动态对象的要求。对象在创建的同时要自动执行函数,对象在消亡之前要自动执行析构函数。由于malloc/free是库函数而不是运算符,不在编译器控制权限之内,不能够把执行构造函数和析构函数的任务强加于malloc/free。因此c++语言需要一个能完成动态内存分配和初始化工作的运算符new,以及一个能完成清理与释放内存工作的运算符delete。注意new/delete不是库函数。

 

 centos   共享不了文件夹

 mount -t vmhgfs .host:/ /mnt/hgfs cannot mount filesystem: no such device 

解决办法如下:

 

https://my.oschina.net/u/2400083/blog/474940 
 

20161019

http://blog.csdn.net/csxiaoshui/article/details/44177495  c++11 多线程 实现方式

http://blog.csdn.net/csxiaoshui/article/details/44202129 

 

arning: Source file is more recent than executable. 出现了上述错误的原因是,修改了源文件,而没有make!因此,需要重新编译一遍

  Uedit 打开Ini , 显示是ANSI文件。吕工说转换成 UTF8编码,QT读入就正常。

no matching function for call to  ifstream open

 

Change to:

file.open(name.c_str());

or just use the constructor as there is no reason to separate construction and open:

std::ifstream file(name.c_str());

 

null was not declared in this scope

 

NULL并不是C++的关键字,它可以看一个0的常量,因此用
#define NULL 0

2016-10-18 周二

C++设计模式里有工厂模式,单例模式。

http://blog.csdn.net/bestone0213/article/details/43491785   单例例子

QHBoxLayout:水平布局,在水平方向上排列控件,即:左右排列

2016-10-14

 C语言变量声明加冒号的用法(占位符)   

http://blog.chinaunix.net/uid-24517549-id-4051159.html    位域,段域。

 

c++函数声明 后面加冒号:   C++类构造函数初始化列表  成员初始化列表,按声明顺序初始化

http://blog.csdn.net/ianchoi/article/details/6917899  这个有一个详细的构造函数使用 初始化列表的好处和举例,最大的好处是使常量数据成员赋值变为可能,相当于初始化。还有是类成员初始化之前就初始化完成了。内置初始化不能达到的。

tableWidget用了一个双击槽函数on_tableWidget_doubleClicked(QModelIndex index)
。会传递一个参数QModelIndex index,会在槽函数中判断是第几行,执行响应的操作,我现在的问题是我想在其他地方也触发这个槽函数,我就是不知道怎么给QModelIndex类型赋值,

 

 

 

2016-10-13

http://www.cnblogs.com/cxjchen/p/3148582.html  单例模式

 

2016-10-10

 

http://www.cnblogs.com/daidaigua/archive/2012/04/18/2455399.html

 

 

 

 

reentrant

实在没找着qt的方法, 通过windows api暂时满足我的需求;

void xxx::focusInEvent(QFocusEvent *event)
{
...

//关闭输入法
QWidget *pWidget = this->window();
QNoNCDialog *pNcDialog = (QNoNCDialog*)pWidget;
HWND hWnd = pNcDialog->GetHwnd();
m_hIMC = ImmAssociateContext(hWnd, NULL); 
}

void xxx::focusOutEvent(QFocusEvent *event)
{
...

//恢复输入法
QWidget *pWidget = this->window();
QNoNCDialog *pNcDialog = (QNoNCDialog*)pWidget;
HWND hWnd = pNcDialog->GetHwnd();
ImmAssociateContext(hWnd, m_hIMC); 
}

 

HIMC _IMC;
HWND hWnd = (HWND)this->winId();
_IMC = ImmGetContext(hWnd);
if (hWnd && IsWindow(hWnd))
{
    ImmAssociateContext(hWnd, NULL);
    ImmReleaseContext(hWnd,_IMC);
}

2016-10-08

今天吕工给了一个新的程序,然后很多DOS下的东西,没有用过和见过

unsigned char far *    :大于64K的块被分配;用远指针存取该块

在16位编译器(Turbo C..)中常见。这跟内存寻址有关(看一下汇编。。。我头都大了@_@)
PC机的内存地址是由段地址和偏移地址组成(汇编中常见的词),每个段不能超过64K地址。因此在段内寻址,只要用到偏移地址就够了,因段地址寄存器所存的段地址是不变的,用指针时,只16位够了(仅表示偏移地址)这类地址称为近指针(near型);当要跨段时,即要指明所要存取的段地地和偏移地址时,这时段寄存器中所存段地址要改变,因此要用指针指向另一个段内地址时,此时要用32位表示(段地址:偏移地址),称远指针,是far 型的。
在16位C编译器还提供了一种huge巨型指针,当地址超过64k段容量时,自动修改段地址,使之指向另一段。不过,这些都是由系统自动管理,我们用不着操心。
unsigned char far *就是一个指向无符号字符型的远指针(也就是指向一个字节的远指针)

 

void interrupt (*oldtimer)(void)
首先interrupt 用于说明这是中断处理函数, 我们为了简单方便, 先省略它,变成
void (*oldtimer)(void)
根据运算顺序:  
1, *oldtimer  说明oldtimer 是个指针!
2, (*oldtimer)(void) 说明(*oldtimer)是个函数
3,  void (*oldtimer)(void)  说明函数(*oldtimer)(void) 的返回类型是void
即 oldtimer 是一个指向 “无参数,返回类型为void” 类型函数的指针。中断处理函数, 我们为了简单方便, 先省略它,变成
void (*oldtimer)(void)
根据运算顺序:  
1, *oldtimer  说明oldtimer 是个指针!
2, (*oldtimer)(void) 说明(*oldtimer)是个函数
3,  void (*oldtimer)(void)  说明函数(*oldtimer)(void) 的返回类型是void
即 oldtimer 是一个指向 “无参数,返回类型为void” 类型函数的指针。

 

getvect()函数是用来取得DOS中断地址。setvect()则是用来向指定的DOS中断地址写入新的中断内容
GCC
G++
gdb

 

2016-09-23 周五

 

对于功率,dB = 10*log()。对于电压或电流,dB = 20*log()。
dB的意义其实再简单不过了,就是把一个很大(后面跟一长串0的)或者很小(前面有一长串0的)的数比较简短地表示出来。如(此处以功率为例):

X = 100000 = 10*log(10^5) = 50 dB

X = 0.000000000000001 = 10*log(10^-15) = -150 dB

dBm 定义的是 miliwatt。 0 dBm = 10log(1) mW = 1 mW;

dBw 定义 watt。 0 dBw = 10log1 W = 10*log(1000) mw = 30 dBm。

dB在缺省情况下总是定义功率单位,以 10*log 为计。当然某些情况下可以用信号强度(Amplitude)来描述功和功率,这时候就用 20log 为计。不管是控制领域还是信号处理领域都是这样。比如有时候大家可以看到 dBmV 的表达。

 

 

 

 

-------Cin输入16进制数:

#include <iostream>
using namespace std;
int main(void)
{
    int getint;
    cout<<"put in num:"<<endl;

    cin>>hex>>getint;
    cout<<hex<<getint;
    return 1;
}

 

----控制台竟然没有输出

    uint8_t uchCRCHi = 0xFF ; 
    uint8_t uchCRCLo = 0xFF ; 

    cout<<hex<<uchCRCHi<<endl;
    cout<<hex<<uchCRCLo<<endl;

改成

    uint16_t uchCRCHi = 0xFF ;
    uint16_t uchCRCLo = 0xFF ;

就有输出了。
 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值