数组做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. Linux snmp监控

    http://blog.csdn.net/apple_llb/article/details/50494787 http://www.ttlsa.com/monitor/snmp-oid/

  2. 【小技巧】9针USB转串口简易连通性测试,附25针转9针

    Part 1 前言 最近用SecureCRT连接串口,因为是笔记本用的USB转串口,好多次出现安装驱动OK,连接上了,但是没有串口打印.无法进行控制的问题:所以不清楚是USB串口的驱动问题,还是转接用 ...

  3. Diskpart命令安装系统小结

    <diskpart命令安装系统小结> 今天给同学安装系统,win8改win7.同学是预装了win8的联想y480,分区表采用的是GPT格式,捣鼓了半天才知道.GPT格式是新式的分区格式,相 ...

  4. C# Winform 文件编码批量转换工具

    在发布产品程序包时,往往需要对程序文件进行编码检查,写了一个可以批量修改文件编码格式的辅助工具,希望对有同样需求的童鞋有帮助. 1.程序界面: 2.核心代码: /// <summary> ...

  5. Java hour 52 Weather

    采用jetty 后,默认的welcome-file-list 配置失效了,直接跳转到了struts2 的control 中去了. <welcome-file-list> <welco ...

  6. 微信聊天测试脚本 wx_sample.php

    <?php </FuncFlag>                             </xml>);         curl_setopt($ch, CURLO ...

  7. hdu 4833 离散化+dp ****

    先离散化,然后逆着dp,求出每个点能取到的最大利益,然后看有没有钱,有钱就投 想法好复杂 #include <stdio.h> #include <string.h> #inc ...

  8. node Later定时任务

    var later = require('later'); later.date.localTime(); var basic = {h: [15], m: [40], s: [0]}; var co ...

  9. 使用jQuery实现类似开关按钮的效果

    转自:http://www.cnblogs.com/linjiqin/p/3148228.html 本案例实现类似开关按钮效果. 页面有下拉列表.文本框.按钮等表单元素,大致实现如下效果:1.页面一加 ...

  10. sql 遍历结果print和表格形式

    select * from tb_province --省 pID pName1 北京市2 天津市3 上海市4 重庆市5 河北省6 山西省....... select * from tb_city - ...