字符串赋值方式理解 sizeof 和strlen的一些区别

#include<stdio.h>
#include<string.h> 
int main()
{
 int a,i=0;
 char ch[10000];
 while(scanf("%d",&a)!=EOF&&a!=-1)
 {
  ch[i++]=a;
 }
 /*
 测试结果 sizeof 测试的是总空间  包括\0
 strlen 测试的 是遇到第一个\0之前的长度
 */
 printf("sizeof计算的长度:%d\n",sizeof(ch));
 printf("strlen计算的长度:%d\n",strlen(ch));
 char th[]={"abc"};
 puts(th);
 printf("sizeof计算的长度:%d\n",sizeof(th));
 printf("strlen计算的长度:%d\n",strlen(th));
// char sh[];
 char sh[]={‘a‘,‘b‘,‘c‘,‘\0‘};//char sh[]={‘a‘,‘b‘,‘c‘};这是错误的赋值方式 这样赋值后面没有\0  打印的结果是abcabc   sizeof少一个
// memset(sh,0,sizeof(sh));
// sh[0]=‘a‘;
 puts(sh);
 printf("sizeof计算的长度:%d\n",sizeof(sh));
 printf("strlen计算的长度:%d\n",strlen(sh));
} // 测试数据
/*
1 0 2 0 1 0 0 -1
平常以为长度为 7
高精度运算时 初始化后为空 所以计算时加字符0 不然他会出事的
*/

时间: 2024-10-03 08:46:55

字符串赋值方式理解 sizeof 和strlen的一些区别的相关文章

说明sizeof和strlen之间的区别。

解析:由以下几个例子我们说明sizeof和strlen之间的区别.第1个例子: sizeof(ss)结果为4,ss是指向字符串常量的字符指针.sizeof(*ss)结果为1,*ss是第一个字符.第2个例子: sizeof(ss)结果为11,ss是数组,计算到"\0"位置,因此是(10+1).sizeof(*ss)结果为1,*ss是第一个字符.第3个例子: sizeof(ss)结果为100,ss表示在内存中预分配的大小,100×1.strlen(ss)结果为10,它的内部实现是用一个循环

sizeof和strlen, length的区别

一.sizeof    sizeof(...)是运算符,而不是一个函数.    一个简单的例子:int a;cout<<sizeof a<<endl;    在头文件中typedef为unsigned int,其值在编译时即计算好了,参数可以是数组.指针.类型.对象.函数等.    它的功能是:获得保证能容纳实现所建立的最大对象的字节大小.    由于在编译时计算,因此sizeof不能用来返回动态分配的内存空间的大小.    实际上,用sizeof来返回类型以及静态分配的对象.结构

sizeof、strlen、字符串、数组,整到一块,你还清楚吗?

写在前面 sizeof.strlen.字符串.数组,提到这些概念,相信学过C语言的人都能耳熟能详,也能谈得头头是道,但是,在实际运用中,当这些内容交织在一起时,大家却不一定能搞地清清楚楚,本文的目的正是帮助大家将相关知识总结清楚. 正文 先看一段代码 1 #include <stdio.h> 2 #include <stdlib.h> 3 4 void testchar(char str[]) 5 { 6 printf("%d %d\n", sizeof(str

C语言中字符串赋值的几个理解

在C语言中,字符串的赋值主要有两种方法,第一种是通过指针的方式直接赋值,第二种是通过数组直接赋值. 一.首先,我们来看第一种赋值方法:指针式赋值 我们知道,上面的示例是显然可以正常执行的,也是很容易理解的.但是下面这种方式就令人有点难以理解和头大了. 通过程序的运行情况,我们可以知道:char *p = "hello";这种字符串的赋值方式是完全没有问题的.要理解这种赋值方式,我们首先得理解双引号(特别注意:这个是双引号,不要赋值的时候给弄了个单引号)在这个语句中做了什么工作.双引号主

C语言中sizeof与strlen区别

C语言中sizeof 与strlen 区别 一.本质区别 sizeof 和strlen 有本质上的区别.sizeof 是C 语言的一种单目运算符,如++.--等,并不是函数,sizeof 的优先级为2 级,比/.% 等3 级运算符优先级高,sizeof 以字节的形式给出操作数的存储空间的大小.而 strlen 是一个函数,是由 C 语言 的标准库提供的.strlen 计算的  是字符串的长度. 二.使用区别 1.sizeof sizeof 的操作数可以是数据类型.函数.变量,表达式使用方式为:

C语言中,当计算字符数组长度时,用sizeof 和strlen 的原理及两者的区别

字符数组的长度计算:必须以终止符'\0'作为边界,但对字符数组赋值时,有两种方式: 1:定义时用字符初始化 (1)char chs[7] = {'a', 'c', '0', 'z', '3','d'}; // 长度为6 上式等价于: (2)char chs[7] = {'a', 'c', '0', 'z', '3','d', '/0'}; // 长度为6 也等价于: (3)char chs[] = {'a', 'c', '0', 'z', '3','d', '/0' }; // 长度为6 但不等

C语言:内存地址分析 &amp; sizeof和strlen用法总结

还是在大学时代接触的C语言,当时学习数组.指针等概念时,怎一个"晕"字了得.最近在学习之余,疯狂地恶补了相关知识,故总结之,如有错误,请大家多多指点. 一. 内存地址分析 1) 先来看一个最基础的例子: int a[4]; 提问:&a[0],  a,  &a,  a+1,  &(a+1),  &a+1 分别表示什么? 咋一看,真的不知所措: 我们可以图解来分析它(假设下面的操作均在32为系统上面). 先来对上图进行简单的说明工作: 1. 紫色区域就是数组

sizeof和strlen的区别

char str[20]="0123456789"; int   a=strlen(str); /*a=10;strlen 计算字符串的长度,以\0'为字符串结束标记. int   b=sizeof(str); /*b=20;sizeof 计算的则是分配的数组str[20] 所占的内存空间的大小,不受里面存储的内容影响 char *str1="absde"; char str2[]="absde";char str3[8]={'a',};char

【C++基础】sizeof 与 strlen的区别

要理解两者的区别,就要分别理解他们的本质 strlen(char *) 计算字符串的长度,内部实现是用一个循环计算字符串的长度,直到‘\0’为止 1.srtlen 是一个函数,参数只能为char 或者 string (sizeof是运算符,可以对好多类型作sizeof,如struct, class等) 2.对数组作sizeof不退化为指针,传递给strlen就退化为指针 3. char ss[100]="012345467"; cout << strlen(ss) <