关于strlen的一点思考
2012-08-17 16:37
197 查看
今天在c和指针的时候,要写一个copy_n()的函数,用自己的方法写出来,突然发现关于strlen的怪异的事情,代码如下:
突然发现strlen(src)是4,而strlen(dst)是20,strlen返回的是什么呢?继续发现下,后面再printf("%d,%d\n",sizeof(src),sizeof(dst));输出的是字符串的长度5和9,然而,strlen返回的是什么呢?4和20,如果是字符串的实际字符数,那么src是对的,那dst为什么是20呢?更发现一个神奇的问题,在c-free下面的结果是(4,20),而拿到vs2008,结果变成了(4,24),怎么回事呢?在百度百科上面找到这样一句话:“strlen(char*)函数求的是字符串的实际长度,它求得方法是从开始到遇到第一个'\0',如果你只定义没有给它赋初值,这个结果是不定的,它会从aa首地址一直找下去,直到遇到'\0'停止”,结果不同的原因应该就是这样解释吧。那么这样结合起来,src的结果是4也就解释了,字符串的长度,实际长度。
#include<stdio.h> #include<string.h> #include <stdlib.h> void copy_n( char dst[], char src[], int n ) { int i; printf("len1 = %d, len2 = %d\n",strlen(src),strlen(dst)); for( i = 0; i < n; i++ ) { if( i < strlen(src) ) dst[i] = src[i]; else dst[i] = '\0'; } } int main() { char src[5]={ 'a','b','c','d','\0' }, dst[9]; int i; printf("%d,%d\n",strlen(src),strlen(dst)); printf("%d,%d\n",sizeof(src),sizeof(dst)); int n = 7; copy_n(dst,src,n); for( i = 0; i < n; i++ ) { printf("%c",dst[i]); } system("pause"); return 0; }
突然发现strlen(src)是4,而strlen(dst)是20,strlen返回的是什么呢?继续发现下,后面再printf("%d,%d\n",sizeof(src),sizeof(dst));输出的是字符串的长度5和9,然而,strlen返回的是什么呢?4和20,如果是字符串的实际字符数,那么src是对的,那dst为什么是20呢?更发现一个神奇的问题,在c-free下面的结果是(4,20),而拿到vs2008,结果变成了(4,24),怎么回事呢?在百度百科上面找到这样一句话:“strlen(char*)函数求的是字符串的实际长度,它求得方法是从开始到遇到第一个'\0',如果你只定义没有给它赋初值,这个结果是不定的,它会从aa首地址一直找下去,直到遇到'\0'停止”,结果不同的原因应该就是这样解释吧。那么这样结合起来,src的结果是4也就解释了,字符串的长度,实际长度。
相关文章推荐
- 关于建构主义的一点思考
- 【Unity&MOD】关于MOD的一点思考
- 关于职业生涯的一点思考
- 关于对象之间通信的一点思考
- 关于sqlite遇到问题时的一点思考
- 关于 CSDN博客SEO优化的一点思考
- 关于数据冗余的一点思考
- 关于各种电路板相互连接的一点思考
- 关于二叉树后续遍历算法的一点思考
- 关于新型能源的一点思考.
- 关于C语言结构体成员变量偏移的一点思考
- 路要怎么走?关于程序员成长的一点思考
- 关于程序员选择就业单位的一点思考
- 关于Sqlite数据库二进制数据字段操作方法的一点思考
- 关于Windows下ShellCode编写的一点思考
- 关于Java中static的一点思考
- 关于程序员成长的一点思考
- 关于后台系统自动生成的一点思考
- 关于汉诺塔非递归算法的一点思考
- 关于接下来写博客的一点思考