while(*ptr++)什么时候可以作为循环体
来源:互联网 发布:mentor软件 编辑:程序博客网 时间:2024/04/29 10:04
1. strcat函数实现
char *strcat(char *dest, const char*src)
{
assert((dest!=NULL)&&(src!=NULL));
char *address = dest;
while(*dest)//此处不可以用while(*dest++),由于需要dest指向'\0'位置,如果*dest++作为循环条件,dest执行'\0'后面的字节
{
dest++;
}
while(*dest++=*src++);//这里只需要将src内容拷贝到dest,不需要管最后dest和src指针指向'\0'后的一位
return address;
}
2. strcpy函数实现
char *strcpy(char *dest, const char *src)
{
assert((dest!=NULL)&&(src!=NULL));
char *address = dest;
while (*dest++=*src++);//这里可以保证将src的'\0'拷贝给dest
return address;
}
3. strcmp函数实现
int strcmp(const char *dest, const char *src)
{
assert((dest!=NULL)&&(src!=NULL));
while (*dest&&*src&&*dest==*src)//这里绝对不能用*dest++=*src++,因为最后dest和src指针指向不相等到后一个字节
{
dest++;
src++;
}
return *dest-*src;
}
4. strlen函数实现
size_t strlen(const char *dest)
{
assert(dest != NULL);
size_t len = 0;
while(*dest++)//这里可以用*dest++作为循环条件,因为不用dest指针
{
len++;
}
return len;
}
5. memcpy函数实现
void *memcpy(void*dest, const void *src, size_t len)
{
assert((dest!=NULL)&&(src!=NULL));
void*address = dest;
while (len--)
{
*(char*)dest = *(char*)src;
dest++;
src++;
}
return address;
}
优化的memcpy
void *_memcpy(void *dest, const void *src, size_t n)
{
void *ret = dest;
while (n/sizeof(long) > 0) {
*(long*)dest = *(long*)src;
n -= sizeof(long);
dest = (long*)dest + 1;
src = (long*)src + 1;
}
while (n-->0) {
*(char*)dest = *(char*)src;
dest = (char*)dest + 1;
src = (char*)src + 1;
}
return ret;
}
- while(*ptr++)什么时候可以作为循环体
- 【看书】for,(do-)while的循环体执行
- while((*++ptr > '0' ) && (*++ptr <= '9' ) )的错误
- if判断语句 循环体for(){} while (){} do {}while();
- linux脚本编程---循环体while和条件语句if then
- 循环体(for/while)循环变量的设置
- PHP CURL 在WHILE FOR 循环体中只执行一次
- 关于微原什么时候要加BYTE PTR
- 什么时候你可以创业?
- 什么时候你可以创业?
- 什么时候你可以创业?
- 什么时候你可以创业?
- 什么时候你可以创业?
- 什么时候你可以创业?
- 什么时候你可以创业?
- 什么时候可以重用我~
- 什么时候可以觉醒
- 在while和do while循环体里面尽量不要用到自增或自减
- C++计算绝对值的函数
- uva507 - Jill Rides Again(最大子序列和)
- Apache HTTP Server初步安装
- 一个简单线程池的实现
- [leetcode 230]Kth Smallest Element in a BST----求二叉搜索树的第K小值
- while(*ptr++)什么时候可以作为循环体
- Phpcms v9 审核文章功能只能超级管理员审核吗?
- win10/win8.1/win8.1默认开启小键盘
- SpringMVC的参数获取方式
- 58-题目1442:A sequence of numbers
- HashMap迭代时Remove不抛出ConcurrentModificationException的特例
- ESP8266 SDK 编程入门 01-基础篇
- 集合与泛型
- Java高级工程师应该具备的知识点