C语言实现strlen

strlen:

 1 #ifndef STRLEN_H
 2 #define STRLEN_H
 3
 4 #include <stdio.h>
 5
 6 // 参考微软的写法
 7 int cat_strlen(const char *str) {
 8     const char *p = str;
 9
10     while (*p++) ;
11     //printf("%s\n", *p);
12
13     return (p - str - 1); // 最后p指向‘\0‘,所以需要减1
14 }
15
16 #endif

main:

 1 #include "strlen.h"
 2
 3 void test_strlen();
 4
 5 int main() {
 6     test_strlen();
 7
 8     return 0;
 9 }
10
11
12
13 void test_strlen() {
14     int len = cat_strlen("test strlen");
15     printf("%d\n", len);
16 }
时间: 2024-10-15 07:22:17

C语言实现strlen的相关文章

C语言之strlen和sizeof

sizeof运算符,它以字节为单位给出数据的大小. strlen()函数以字符为单位给出字符串的长度. 从上面可以明确的看出来,sizeof是运算符,而strlen则是函数. 一.sizeof sizeof的参数有很多,比如数据类型(int.float等).数组(数组作为参数时要使用数组名).指针.结构体.对象.函数等等. 数组--编译时分配的数组空间大小. 指针--存储该指针所用的空间大小(存储该指针的地址的长度,是长整型,一般为4). 类型--该类型所占空间大小. 对象--对象的实际占用空间

恶补c语言之strlen的实现

最近与同学交流c语言库函数的实现,发现自己所学的不能灵活运用,于是乎我就开启猛火力模式,先自己来实现下常见的库函数. strlen()函数说明 返回指定字符串长度,不包括结束字符'/0' 实现原型: int MyStrlen(const char *str) { int n; while(*str++ != '\0') n++; return n; } // 以下函数为测试函数 void main() { int m; char a[100]; printf("please input a st

C语言实现strlen()4种方法和strcat()3种方法

#include <stdio.h> #include <assert.h> #if 0 // 默认使用法4 // 法1 int strlen(const char* str) { int n; // const char *p = str; //测试这句,这个语句不需要,因为我实参是指针,形参指针改变指向不影响实参指向 for(n = 0; *str != '\0'; n++) { str++; } return n; } #elif 0 // 法2 int strlen(con

C语言实现strlen函数的几种方法

原文地址:http://www.51testing.com/html/72/n-221172.html 传说常见的一个笔试题:不使用中间变量求const字符串长度,即实现求字符串长度库函数strlen函数.函数接口声明如下:int strlen(const char *p): 思路分析: 在字符串中通常可以利用最后一个结束符'\0',但此处参数为const,只读,那么我们不能打他的主意. 函数运行过程中不占用内存基本不可能,除非都使用了寄存器."不使用中间变量"只是说程序员不能显示的申

【c语言】strlen与sizeof对数组和指针的求法

// strlen与sizeof对数组和指针的求法 #include <stdio.h> #include <string.h> int main() { char *pcColor = "12345678"; char acColor[] = "12345678"; printf("%d\n", strlen(pcColor));//8 求字符串的大小 printf("%d\n", strlen(ac

【C语言】strlen函数的实现

strlen所作的仅仅是一个计数器的工作,它从内存的某个位置(可以是字符串开头,中间某个位置,甚至是某个不确定的内存区域)开始扫描,直到碰到第一个字符串结束符'\0'为止,然后返回计数器值(长度不包含"\0"). 根据它的特性我们编写函数: <span style="font-size:18px;">#include<stdio.h> #include<assert.h> int my_strlen(char const *str

【C语言】 strlen()入参空指针导致段错误

背景: 在工作中调试sqlite3相关代码的时候,调用printf()打印sqlite3_exec()的执行日志:因为sqlite3_exec()保存日志的参数传入时为NULL,且没有执行错误,所以再传入printf()时仍然为NULL:如果判断日志不为空时才打印,则无段错误. 分析: Core was generated by `./hello.cgi'. Program terminated with signal SIGSEGV, Segmentation fault. #0 strlen

C语言:strlen的三种实现方法

方法一:指针的方式 #include <stdio.h> #include <stdlib.h> int my_strlen(const char *str) { char *tmp = str;        //用tmp保存原指针的地址 while (*str)            //str++直到'\0' { str++; } return str - tmp;      //两个指针相减,得到字符长度 } int main() { char *p = "bit

oc语言学习之基础知识点介绍(二):类和对象的进一步介绍

一.类.对象在内存中的存储 /* 内存分区: 栈:局部变量 堆:程序员自己写代码申请开辟的 程序员自己维护,编译器现在帮我们自动优化了,它在合适的给我们加上了释放空间的语句,所以我们现在写的对象不会造成内存泄露 全局区:所有的全局变量和静态变量 常量区:所有的常量 代码区:程序编译后的指令集 类是模板,肯定需要存在内存里面,因为实例化对象的时候需要根据这个模板来创建,那么存在内存里面,存在哪呢?? 类模板存在:全局区! 存的是:类的描述,还有所有的方法实现 每个对象都会有一个系统给我们的isa指