数组做sizeof的参数不退化,传递给strlen就退化为指针;
 #include<stdio.h>
#include<stdlib.h>
#include<string.h>
//#define PE(x) printf("sizeof("); printf(#x") = %d\n", sizeof(x)) void func(char str[])
{
printf("func(sizeof(str) = %d)\n", sizeof(str));
}
int main()
{
char str[] = "hello";
char *p = str;
int n = ;
void *q = malloc();
/*
PE(str);
PE(p);
PE(n);
*/
/*
char [],字符数组,OS自动在字符数组末尾追加'\0',
作为字符数组大小的一部分,即占一个字节的内存。
但是,并不作为字符数组有效长度的一部分。strlen是以'\0'
为标志。即char str[] = "hello",内存6,长度5
*/
printf("sizeof(str) = %d\n", sizeof(str)); //字符数组大小 sizeof(str) = 6
printf("strlen(str) = %d\n", strlen(str)); //
printf("sizeof(p) = %d\n", sizeof(p)); //一个指针的大小4个字节 sizeof(p) = 4
printf("strlen(p) = %d\n", strlen(p)); //
printf("sizeof(*p) = %d\n",sizeof(*p)); //第一个字符,sizeof(p) = 1
printf("sizeof(n) = %d\n", sizeof(n)); //sizeof(n) = 4
char s[];
func(s); //函数字符数组以头指针形式传递形参 sizeof(s) = 4
printf("sizeof(*q=malloc(100)) = %d\n", sizeof(p));//一个指针占4字节
return ;
}

sizeof(char [])

定义字符数组时,系统会自动在末尾补上字符串结束标志字符'\0',并一起存到字符数组中,

几点说明:

①字符串结束标志'\O'仅用于判断字符串是否结束,输出字符串时不会输出。

②在对有确定大小的字符数组用字符串初始化时,数组长度应大于字符串长度。如:

char s[7]={ "program”};

由于数组长度不够,结束标志符'\O'未能存人s中,而是存在s数组之后的一个单元里,这可能会破坏其他数据,应特别注意。可以改为:

char s[8]={ "program”};

strcpy()字符串str2中的’\O’也一起拷贝

(4)字符串长度函数strlen()

函数原型:unsigned int strlen(char *str);

调用格式:strlen(字符串);

函数功能:求字符串的实际长度(不包括'\O'),由函数值返回。例如:

static char s[10]= "student";

int len:

len=strlen(s);

len的值为7,而strlen("good")函数值为4。

字符数组char的更多相关文章

  1. java字符数组char[]和字符串String之间的转换

    java字符数组char[]和字符串String之间的转换 觉得有用的话,欢迎一起讨论相互学习~Follow Me 使用String.valueOf()将字符数组转换成字符串 void (){ cha ...

  2. C++string,char* 字符数组,int类型之间的转换

    string.int 常见类型之间相互转换 int & string 之间的转换 C++中更多的是使用流对象来实现类型转换 针对流对象 sstream实现 int,float 类型都可以实现 ...

  3. strlen 字符型数组和字符数组 sizeof和strlen的区别 cin.get(input,Arsize)

    strlenstrlen所作的仅仅是一个计数器的工作,它从内存的某个位置(可以是字符串开头,中间某个位置,甚至是某个不确定的内存区域)开始扫描,直到碰到第一个字符串结束符'\0'为止,然后返回计数器值 ...

  4. 字符串赋值给字符指针(char *a="hello")的正确理解方式

    对于语句  char *a="hello"; 对于这个声明方式,会造成的误解是:声明了一个字符指针(它会指向一个位置),将“字符串”赋值给 指针表达式"*a"所 ...

  5. String类,StringBuffer类转字符数组

    String不可变类型和StringBuffer可变类型 String类和StringBuffer类都是字符串表示类,区别在于String对象引用变量是不可变的,而StringBuffer类对象引用变 ...

  6. 字符数组 & 字符串

    字符数组 char c1[] = "ch111";        \\字符串字面值初始化.!!!字符串字面值末尾处有个\0空字符,也会被copy到字符数组中去,记得预留空间. ch ...

  7. C++中字符数组与string的相互转换

    字符数组转化成string类型char ch [] = "ABCDEFG";string str(ch);//也可string str = ch;或者char ch [] = &q ...

  8. C语言基础复习:字符,字符数组,字符串,字符指针

    1. 概述2. 字符2.1 字符定义和大小2.2 字符的输入和输出2.3 字符的计算3. 字符数组3.1 字符数组的定义和大小3.2 字符数组的输入和输出3.3 字符数组的计算4. 字符串4.1 字符 ...

  9. c++中string类对象和字符数组之间的相互转换

    string类在c++中是一个模板类,位于名字空间std中,注意这里不是string.h,string.h是C字符串头文件. 将string类型转换为字符数组char arr[10];string s ...

随机推荐

  1. ***CI查询辅助函数:insert_id()、affected_rows()

    查询辅助函数 $this->db->insert_id() 这个ID号是执行数据插入时的ID. $this->db->affected_rows() Displays the ...

  2. 远程登录 - telnet、mstsc等工具的使用及遇到的问题

    刚开始是看到老师在用mstsc远程登录oj服务器桌面对“远程登录”一系列的方法开始感兴趣.下面是我的学习笔记及遇到的一些问题的整理. Mstsc - 百度百科:http://baike.baidu.c ...

  3. C/C++中extern关键字详解

    转自:http://www.cnblogs.com/yc_sunniwell/archive/2010/07/14/1777431.html 1 基本解释:extern可以置于变量或者函数前,以标示变 ...

  4. POJ2735/Gym 100650E Reliable Nets dfs

    Problem E: Reliable NetsYou’re in charge of designing a campus network between buildings and are ver ...

  5. SQL Server 阻止了对组件 'Ad Hoc Distributed Queries' 的 STATEMENT'OpenRowset/OpenDatasource' 的访问,因为此组件已作为此服务器安全配置的一部分而被关闭。系统管理员可以通过使用 sp_configure 启用 'Ad Hoc Distributed Queries'。有关启用 'Ad Hoc Distributed Que

    看错误提示就知道是因为SQL Server的Ad Hoc Distributed Queries组件被禁用了,这里我用的SQL Server版本是2005,只需要开启Ad Hoc Distribute ...

  6. js:语言精髓笔记10--闭包

    闭包:  //JS函数式风格中,在内部保存数据和对外无副作用这两个特性主要就是通过闭包实现的: 函数与闭包: 一个函数是一段静态代码,它是一个代码书写时已经编译期,静态概念:闭包是函数在代码运行过程中 ...

  7. PDA手持终端实现零售行业商场和超市仓储管理和销售开单自动化和系统化

    近几年,连锁药店得到了迅速扩张,由于药品种类过于繁杂.客户分散票据过多,急剧扩张之后的连锁药店企业在信息流处理上遇到了各种各样的问题 到现在已经有3000多家连锁药房,需要采购的正规药品就有数万个品种 ...

  8. POJ2441 Arrange the Bulls(状压DP)

    题目是,有n头牛,每头牛都喜爱某几个草地,要把这n头牛分配给m个不同的它们喜爱的草地,问有几种分配方式. dp[n][S]表示前n头牛分配完毕后占用的草地集合是S的方案数 dp[0][0]=1 dp[ ...

  9. Codeforces Round #206 (Div. 2) A. Vasya and Digital Root

    #include <iostream> using namespace std; int main(){ int k,d; cin >> k >>d; ) { k ...

  10. TYVJ P1081 最近距离 Label:这不是分治!!!

    描述    在一块地上,有着n(1<=n<=2000) 头牛,输入n,再分别输入这n头牛的坐标(x,y) (1<=x<=100000,1<=y<=100000),如 ...