C语言字符串长度(转)
C语言字符串长度的计算是编程时常用到的,也是求职时必考的一项。
C语言本身不限制字符串的长度,因而程序必须扫描完整个字符串后才能确定字符串的长度。
在程序里,一般会用strlen()函数或sizeof来获取一个字符串的长度,但这2种方法获取的字符串的长度其实是不一样,我们用如下函数进行测试:
#include<stdlib.h>
#include<string.h>
#include<stdio.h>
int main() { char s1[] = "hello world";
char s2[] = {'h','e','l','l','',' ','w','o','r','l','d','\0'};
char s3[] = "hello\0 world";
char s4[] = {'h','e','l','l','','\0',' ','w','o','r','l','d','\0'}; printf("%d\t%d\t%d\t%d\n",strlen(s1),strlen(s2),strlen(s3),strlen(s4));
printf("%d\t%d\t%d\t%d\n",sizeof(s1),sizeof(s2),sizeof(s3),sizeof(s4));
}
注意,该函数里面定义了4个字符串,基本数据都是“hello world",但需要注意的是,字符串s1和s2给定了字符串数组的大小为20,然后使用2种方式进行赋值;字符串s3和s4是s1和s2对比的字符串,区别就是s3和s4字符串中间插入了一个'\0'。该函数运行的结果如下:
从运行结果可以看出,strlen()函数和sizeof求字符串长度需要注意下面几点:
1. strlen函数求得的字符串长度是从字符串第一个元素到第一个'\0'之间元素的个数(如果字符串中间有'\0',则结果不是整个字符串的长度),同时不包括该'\0'
2. sizeof求得的结果是存储该字符串的变量占用的空间大小,因而一定会包括'\0'.若'\0'后还有空余的空间,也会包含到结果里面
解释(与2种求值方式的实现原理有关):
1. strlen()的一种实现就是遍历字符串,遇到'\0'就终止,因而返回的结果是第一个'\0'前字符元素的个数
2. sizeof 常用来求变量占用内存空间的大小,因而它返回的是存储字符串的变量所占用的内存空间大小,用来求字符串的长度,只在特定情况下可行,即字符数组刚好被一个字符串占满。
转自:http://blog.csdn.net/kstrwind/article/details/8036555
C语言字符串长度(转)的更多相关文章
- C语言——字符串长度的计算方法
1.不带转义字符的字符串 如:“abc!x=/”,其长度为7 2.带转义字符的字符串 (1) 字符串“abc\n”:其中的'\n'为转义字符(换行符),计算字符串长度时只能计作一个字符,所以该字符串的 ...
- Swift3.0语言教程获取字符串长度
Swift3.0语言教程获取字符串长度 Swift3.0语言教程获取字符串长度,当在一个字符串中存在很多的字符时,如果想要计算字符串的长度时相当麻烦的一件事情,在NSString中可以使用length ...
- C 语言实例 - 计算字符串长度
C 语言实例 - 计算字符串长度 C 语言实例 C 语言实例 计算字符串长度. 实例 - 使用 strlen() #include <stdio.h> #include <strin ...
- YTU 2417: C语言习题 字符串长度
2417: C语言习题 字符串长度 时间限制: 1 Sec 内存限制: 128 MB 提交: 758 解决: 548 题目描述 写一函数,求一个字符串的长度.在main函数中输入字符串,并输出其长 ...
- 宽字符与Unicode (c语言 汉语字符串长度)
在C语言中,我们使用char来定义字符,占用一个字节,最多只能表示128个字符,也就是ASCII码中的字符.计算机起源于美国,char 可以表示所有的英文字符,在以英语为母语的国家完全没有问题. 但是 ...
- go语言:获取字符串长度
go语言字符串底层由字节数组实现,使用UTF-8编码,初始化以后不能被修改 获取字符串长度 一.当字符串中所有字符都是单字节字符时,使用 len 函数获取字符串的长度 package main imp ...
- 基于visual Studio2013解决C语言竞赛题之0704字符串长度
题目
- 求字符串长度之递归与非递归的C语言实现
在上一篇中介绍了字符串拷贝的递归与非递归的实现,这里就不在赘述递归原理. 递归求字符串长度_strlen: 1 int _strlen(const char *src) 2 { 3 if( src = ...
- C语言字符串操作总结大全(超详细)
本篇文章是对C语言字符串操作进行了详细的总结分析,需要的朋友参考下 1)字符串操作 strcpy(p, p1) 复制字符串 strncpy(p, p1, n) 复制指定长度字符串 strcat( ...
随机推荐
- 基于“事件”驱动的领域驱动设计(DDD)框架分析
摘抄自 从去年10月份开始,学了几个月的领域驱动设计(Domain Driven Design,简称DDD).主要是学习领域驱动设计之父Eric Evans的名著:<Domain-driven ...
- response content-type json
2015年11月3日 15:47:43 百度知道:ajax开发中在请求服务器端的响应时, 对于每一种返回类型 规范的做法是要在服务端指定response的contentType 常遇到下面的几种情况: ...
- redis与memcache区别总结
2015年9月2日 14:04:19 总会被问到两者的区别, 在这里总结下: redis 有内置的多种数据结构, list(可用于实现小型队列), hash, set, zset...; memcac ...
- a byte of python (摘01)
a byte of python 第一章 介绍 Python 特色 简单.易学.免费.开源 高层语言.可移植性.解释性 面向对象.可扩展性.可嵌入性 丰富的库 第二章 安装Python http:// ...
- HDU 4966 GGS-DDU(最小树形图)
n个技能,每个技能有0-a[i]的等级,m个课程,每个课程需要前置技能c[i]至少达到lv1[i]等级,效果是技能d[i]达到lv2[i]等级,花费w[i]. 输出最小花费使得全技能满级(初始全技能0 ...
- Greedy:Physics Experiment(弹性碰撞模型)(POJ 3848)
物理实验 题目大意:有一个与地面垂直的管子,管口与地面相距H,管子里面有很多弹性球,从t=0时,第一个球从管口求开始下落,然后每1s就会又有球从球当前位置开始下落,球碰到地面原速返回,球与球之间相碰会 ...
- 将jquery和公共样式缓存到localStorage,可以减少Http请求,从而优化页面加载时间
以下代码: //入口函数 if (window.localStorage) { initJs(); initCss("css", "/gfdzp201508257998/ ...
- 如何让VS2013编写的程序
总体分c++程序和c#程序 1.c++程序 这个用C++编写的程序可以经过设置后在XP下运行,主要的“平台工具集”里修改就可以. 额外说明:(1)程序必须为Dotnet 4.0及以下版本.(XP只支持 ...
- 【leetcode】Word Search (middle)
今天开始,回溯法强化阶段. Given a 2D board and a word, find if the word exists in the grid. The word can be cons ...
- 22中编程语言的HelloWorld
C:printf("HelloWorld"); C++ : cout<<"HelloWorld"; QBasic : Print "Hel ...