strlen() 函数

strlen() 函数通常用来计算字符串的长度,但是今天突然发现个奇怪的现象。

如下所示:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
    char *str;
    int n = 0;
    str = (char *)malloc(30 * sizeof(char));
    printf("%d\n", strlen(str));
    printf("%d\n", sizeof(str));
    return 0;
}

strlen(str) = 34 ?????? 为什么呢? strlen(str) = sizeof(str) + 30 ??? 是吗??

时间: 2024-10-14 01:27:53

strlen() 函数的相关文章

C语言::模拟实现strlen函数

编写一个C语言程序模拟实现strlen函数. 算法 strlen函数功能是计算字符串中字符的个数.(除\0外) 而字符串本身就是一个字符数组,只不过末尾以\0结束. 因此,我们只需遍历除\0之外的所有字符即可. 有三种方法可以解决这个问题. 算法总结 方法一:设置一个整型计数器,遍历字符串. 方法二:通过不断函数自身的递归. 方法三:与方法一类似,设置一个char*变量标记字符串尾部,通过指针相减得到字符长度. 核心代码 //方法一:通过设置整型计数器,模拟实现strlen函数. int my_

实现strlen()函数,strcmp()函数 const知识点

1.strlen()函数的实现: #include<stdio.h> int strLen(char *str); int strLen(char *str){     int i = 0;          while(*str){         str++;         i++;     }          return i; } void main(void){     char *str = "abcdefg";     int length;       

由书写strlen函数碰到的问题。

今天在自己实现strlen函数的时候碰到碰到了一个很有意思的warning: warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings] 1 #include <stdio.h> 2 3 int strlen(char *str) { 4 char *s; 5 for (s=str; *s; s++); 6 return s - str; 7 } 8 9 int main() 10 { 11

教教大家一些strcpy,strcmp,strcat,strlen函数的写法

VC源码: strcmp函数的写法: #include<stdio.h> #include<string.h> int strcmp1(char* a, char* b) { for(;*a==*b;a++,b++) if(*a!='\0') return 0; return *a - *b; } main() {  int l; char a[10]={"db"}; char b[10]={"cb"}; l=strcmp1(a,b); pr

C++ sizeof操作符的用法和strlen函数的区别

摘要:本人首先介绍了C++中sizeof操作符的用法和注意事项,其次对比了和strlen的区别和使用,方便大家在写代码的时候查阅,和面试.笔试的时候复习. 目录: sizeof的用法: sizeof和strlen的区别: sizeof的用法: sizeof 是一种单目操作符,而不是函数.sizeof以字节形式给出操作数的存储空间. 操作数可以是一个表达式或在括号内的类型名.操作数的存储空间由操作数的类型决定. char str[]="hello"; char str1[100]; ch

C语言strlen()函数用法

C语言strlen()函数:返回字符串的长度 头文件:#include <string.h> strlen()函数用来计算字符串的长度,其原型为:unsigned int strlen (char *s);  s为指定的字符串 eg: #include<stdio.h> #include<string.h> int main() { char *str1 = "http://see.xidian.edu.cn/cpp/u/shipin/"; char

strlen函数细节

strlen所作的仅仅是一个计数器的工作,它从内存的某个位置(可以是字符串开头,中间某个位置,甚至是某个不确定的内存区域)开始扫描,直到碰到第一个字符串结束符'\0'为止,然后返回计数器值. 原型: extern unsigned int strlen(char *s); 在Visual C++ 6.0中,原型为size_tstrlen(const char *string); ,其中size_t实际上是unsigned int,在VC6.0中可以看到这样的代码:typedef unsigned

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

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

strlen函数的多种实现方式

strlen函数检测字符串实际长度,不包含'\0'. 如:char s[]="1234567"; int a=strlen(s);//a=7 可认为strlen(char *)检测的是'\0',strlen(char *)碰到'\0'就返回'\0'以前的字符数. #include<stdio.h> #include<stdlib.h> #include<string.h> #include<assert.h> int my_strlen1

笔试题: 不使用中间变量求const字符串长度,即实现求字符串长度库函数strlen函数

笔试题: 不使用中间变量求const字符串长度,即实现求字符串长度库函数strlen函数. 函数接口声明如下:int my_strlen(const char *p); strlen函数实际完成的功能是从代表该字符串的第一个地址开始遍历,直到遇到结束符'\0'. 而返回的长度大小不包括'\0'. #include <stdio.h> #include <assert.h> //使用中间变量 //int my_strlen(const  char *str) //{ //   ass