学习笔记之字符串学习
2011-06-21 20:49
190 查看
字符串学习中主要加深了对以前掌握中的盲点学习。
1,memcpy和memmove函数的区别
函数的原型如下:
并不是遇到
字符,或者说这些函数并不把参数当字符串看待,因此参数的指针类型是
的两个参数
2,C标准库的I/O缓冲区。
C标准库的I/O缓冲区有三种类型:全缓冲、行缓冲和无缓冲。当用户程序调用库函数做写操作时,不同类型的缓冲区具有不同的特性。
全缓冲 如果缓冲区写满了就写回内核。常规文件通常是全缓冲的。行缓冲 如果用户程序写的数据中有换行符就把这一行写回内核,或者如果缓冲区写满了就写回内核。标准输入和标准输出对应终端设备时通常是行缓冲的。 无缓冲 用户程序每次调库函数做写操作都要通过系统调用写回内核。标准错误输出通常是无缓冲的,这样用户程序产生的错误信息可以尽快输出到设备。观察下面的实例:
当直接运行时,发现终端并没有输出“Hello ,world”,将注释去掉或将将printf("Hello,world")替换成printf("Hello, world/n")都能打印出“Hello ,world”。从上面的例子证明,C标准输出是行缓冲。
上图是C标准库的I/O缓冲区
1,memcpy和memmove函数的区别
函数的原型如下:
#include <string.h> void *memcpy(void *dest, const void *src, size_t n); void *memmove(void *dest, const void *src, size_t n); 返回值:dest指向哪,返回的指针就指向哪
memcpy函数从
src所指的内存地址拷贝
n个字节到
dest所指的内存地址,和
strncpy不同,
memcpy
并不是遇到
'/0'就结束,而是一定会拷贝完
n个字节。这里的命名规律是,以
str开头的函数处理以
'/0'结尾的字符串,而以
mem开头的函数则不关心
'/0'
字符,或者说这些函数并不把参数当字符串看待,因此参数的指针类型是
void *而非
char *。
memmove也是从
src所指的内存地址拷贝
n个字节到
dest所指的内存地址,虽然叫move但其实也是拷贝而非移动。但是和
memcpy有一点不同,
memcpy
的两个参数
src和
dest所指的内存区间如果重叠则无法保证正确拷贝,而
memmove却可以正确拷贝。假设定义了一个数组
char buf[20] = "hello world/n";,如果想把其中的字符串往后移动一个字节(变成
"hhello world/n"),调用
memcpy(buf + 1, buf, 13)是无法保证正确拷贝的。
2,C标准库的I/O缓冲区。
C标准库的I/O缓冲区有三种类型:全缓冲、行缓冲和无缓冲。当用户程序调用库函数做写操作时,不同类型的缓冲区具有不同的特性。
全缓冲 如果缓冲区写满了就写回内核。常规文件通常是全缓冲的。行缓冲 如果用户程序写的数据中有换行符就把这一行写回内核,或者如果缓冲区写满了就写回内核。标准输入和标准输出对应终端设备时通常是行缓冲的。 无缓冲 用户程序每次调库函数做写操作都要通过系统调用写回内核。标准错误输出通常是无缓冲的,这样用户程序产生的错误信息可以尽快输出到设备。观察下面的实例:
#include<stdio.h> int main() { printf("Hello ,world/n"); /*fflush(stdout);*/ while(1); return 0; }
当直接运行时,发现终端并没有输出“Hello ,world”,将注释去掉或将将printf("Hello,world")替换成printf("Hello, world/n")都能打印出“Hello ,world”。从上面的例子证明,C标准输出是行缓冲。
上图是C标准库的I/O缓冲区
相关文章推荐
- 【TypeScript学习笔记】代码中反引号的作用-多行文本输入创建多行字符串
- Swift学习笔记(十七)——导入Foundation使用更多字符串功能
- python学习笔记,整形,字符串
- 学习笔记 - BufferedReader字符缓冲流从文件读入字符串
- boost lexical_cast 字符串数字间的字面转换(学习笔记)
- JAVA学习笔记之字符串
- python cookbook第三版学习笔记三:列表以及字符串
- C#学习之路,学习笔记 2.2 字符、字符串、数字的初始化与读取
- C语言学习笔记 之字符串
- 播布客教学视频_C学习笔记_9.1_整形转字符串
- PHP学习笔记-->003 PHP 字符串
- PHP 学习笔记 - - - 简单方法的使用 (字符串与数字)
- python学习笔记2-核心类型-字符串
- SilverLight学习笔记--使用WebClient实现通讯(一)(上传和下载字符串数据)
- UNIX环境编程学习笔记(22)——进程管理之system 函数执行命令行字符串
- ruby 字符串学习笔记3
- BZOJ 3555: [Ctsc2014]企鹅QQ [字符串哈希]【学习笔记】
- .Net连接字符串(ConnectionString)学习笔记(转)
- gson解析json字符串学习笔记...
- OC学习笔记 字符串常用函数