数组做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. p235习题1

  2. js 使用json.js处理json对象

    使用参考代码: <script src="json/json2.js"></script> <script type="text/javas ...

  3. Note from head first

    1 Slow down. The more you understand, the less you have to memorize. 2 Do the exercises. Write your ...

  4. jquery笔记(仅供个人参考)

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/ ...

  5. char *c和char c[]区别

    char *c和char c[]区别 问题引入:在实习过程中发现了一个以前一直默认的错误,同样char *c = "abc"和char c[]="abc",前者 ...

  6. SU supef命令学习

  7. easyui的combobox下拉框初始化默认值以及保持该值一直显示的方法

    easyui的combobox下拉框默认初始值是空,下面是实现从远程加载数据之后初始化默认值,以及让该值一直排在下拉框的最顶部的方式. 目前的需求是需要在初始化的时候添加"全部数据库&quo ...

  8. HDU2457 DNA repair(AC自动机+DP)

    题目一串DNA最少需要修改几个基因使其不包含一些致病DNA片段. 这道题应该是AC自动机+DP的入门题了,有POJ2778基础不难写出来. dp[i][j]表示原DNA前i位(在AC自动机上转移i步) ...

  9. BZOJ2675 : Bomb

    首先通过不断翻转坐标系,假设三个点以横坐标为第一关键字,纵坐标为第二关键字排序后A在B前面,B在C前面. 那么只需要处理以下两种情况: 1.B的纵坐标在AC之间,这时三个点的距离和为$2((x_C+y ...

  10. robotium 新建 android 测试项目:

    注意:新建项目后再运行前一定要修改Manifest文件中的instrumentation 中的target package, 这个是测试的入口 1. 程序开始要通知系统我要测的app是什么 如何知道a ...