- getline函数
函数原型: istream& getline ( istream &is , string &str , char delim );
istream &is 表示一个输入流;
string &str 表示把从输入流读入的字符串存放在这个字符串中;
char delim表示遇到这个字符停止读入,在不设置的情况下系统默认该字符为’\n’,也就是回车换行符(遇到回车停止读入);
string line;
getline(cin, line, '#');
cout << line << endl;
输入:Hello CBird # How Are You
输出:Hello CBird
当读入到#时,读取结束。
string line;
getline(cin, line);
cout << line << endl;
不加‘#’结束符判断时,默认以 回车换行 读取结束
当用在while(getline(cin,line))语句中
默认回车符停止读取line, 按 Ctrl+Z 或键入 EOF回车 即可退出循环。
首先getline从标准输入设备上读入字符,然后返回给输入流cin,while判断语句的真实判断对象是cin,判断当前是否存在有效的输入流。
误以为while判断语句的判断对象是line(也就是line是否为空),然后想通过直接回车(即输入一个空的line)跳出循环,却发现怎么也跳不出循环。因为回车只会终止getline()函数的读入操作。getline()函数终止后又进行while()判断(即判断输入流是否有效,输入流当然有效,满足条件),所以又运行getline()函数,跳不出循环。
-
#pragma
一般用法: #pragma parameter
1)#pragma message
待补充。。。
2)#pragma once
保证头文件只被编译一次
3)#pragma pack
能够改变编译器的默认对齐方式 (内存对齐方式)
C语言中的内存对齐,计算机内部,默认是4字节对齐
#pragma pack(1),按照1字节对齐
待补充
4)#pragma comment -
_t 和 _T
-
memcpy memset等函数
函数定义在**<string.h>**头文件中
函数原型: void *memcpy(void *dest, const void *src, size_t n);
函数功能: 从src的开始位置拷贝n个字节的数据到dest。如果dest存在数据,将会被覆盖。memcpy函数的返回值是dest的指针。
用法:(1)可以拷贝任何类型的对象,因为函数的参数类型是void*(未定义类型指针),也就是说传进去的实参可以是int*,short*,char等等。
但是由于函数拷贝的过程是一个字节一个字节的拷贝的,所以实际操作的时候要把void强制转化为char*,这样在指针加的时候才会保证每次加一个字节
函数原型:extern void *memset(void *buffer, int c, int count)
//buffer:为指针或是数组,
//c:是赋给buffer的值,
//count:是buffer的长度.
void *memset(void *s, int c, size_t n);
函数功能:将指针变量 s所指向的前 n 字节的内存单元用一个“整数” c 替换,注意 c 是 int 型。s是 void* 型的指针变量,所以它可以为任何类型的数据进行初始化。
作用:在一段内存块中填充某个给定的值。因为它只能填充一个值,所以该函数的初始化为原始初始化,无法将变量初始化为程序中需要的数据。用memset初始化完后,后面程序中再向该内存空间中存放需要的数据。
区别:
memset主要应用是初始化某个内存空间。
memcpy是用于copy源空间的数据到目的空间中。
strcpy用于字符串copy,遇到‘\0’,将结束。