字符串和字符数组的细节

字符数组的初始化与sizeof、strlen

1、  sizeof是C语言的一个关键字,也是C语言的一个运算符(sizeof使用时是sizeof(类型或变量名),所以很多人误以为sizeof是函数,其实不是);sizeof运算符用来返回一个类型或者是变量所占用的内存字节数。为什么需要sizeof?主要原因一是int、double等原生类型占几个字节和平台有关;二是C语言中除了ADT外还有UDT,这些用户自定义类型占几个字节无法一眼看出,所以用sizeof运算符来让编译器帮忙计算。

2、strlen是一个C语言的库函数,这个库函数的原型是:size_t_strlen(const char *s);这个函数接收一个字符串的指针,返回这个字符串的长度(以字节为单位)。注意一点是:strlen返回的字符串长度是不包含字符串结尾的‘\0‘的。我们为什么需要strlen库函数?因为从字符串的定义(指针指向头、固定结尾、中间依次相连)可以看出无法直接得到字符串的长度,需要strlen的来计算出字符串的长度。

#include<stdio.h>
#include<string.h>

int mystrlen(const char *p)
{
	int cnt = 0;
	while(*p != ‘\0‘)
	{
		cnt++;
		p++;
	}
	return cnt;
}
int main(void)
{
   char *p = "Linux";

   // int len = strlen(p); strlen()函数内部就是上面写的mystrlen()
   int len = mystrlen(p);

   printf("len = %d.\n",len);

   return 0;
}

  

3、sizeof(数组名)得到的永远是数组的元素个数(也就是数组的大小),和数组中有无初始化,初始化多、少等是没有关系的。strlen是用来计算字符串的长度的,只能传递合法的字符串进去才有意义,如果随便传递一个字符指针,但是这个字符指针并不是字符串是没有意义

时间: 2024-08-07 21:20:56

字符串和字符数组的细节的相关文章

字符串和字符数组

  1.字符串 严格意义上来说,C语言并没有字符串原生的字符串的类型,而是通过字符指针来实现的:char *p = "LINUX";.而对于其他的高级语言来说,比如C++的就存在字符串类型: string p1 = "I LOVE LINUX"; . 字符串在内存中其实就多个字节组成的,且地址都是连续的:指针指向字符串的的头部:字符串的结尾是以"\0"(是真能整的零)作为字符串结束的标志. "\0" 的理解: \0 是一个 A

1.7 字符串和字符数组的转换

package Demo; public class Demo2 { public static void main(String[] args) {  String str = "helloworld";  char c[] = str.toCharArray(); //字符串转换为字符数组  for(int x=0;x<c.length;x++){   System.out.println(c[x]+".");   } /*h.  e.  l.  l.  

编程题:字符串与字符数组的输入方法。

#include<stdio.h> void main() {char str1[6],str2[10]; int i; for(i=0;i<5;i++) scanf("%c",&str1[i]); str1[5]='\0'; scanf("%s",str2); printf("%s\n%s\n",str1,str2); } 编程题:字符串与字符数组的输入方法.,布布扣,bubuko.com

C类型字符串和字符数组的区别

1.字符串和字符数组的区别,字符数组和普通数组一样,里面的每个元素是一个个的字符,字符串是存在字符数组中的,字符串的结尾处补上了“\0”截止符. 定义过字符串后,得到的是字符数组的首元素的指针,在结尾处加入截止符,可以方便的访问字符串中的任何一个元素.C类型的字符串是存在字符数组中的,在字符串的结尾处补上"\0",这个结尾符是用来标志字符串结尾的,它的作用是const * p; //p是一个常量指针 2.数组名和指针的区别 int a [20]; int *p =a; (1)数组名的内

【C#】字符串与字符数组

字符串与字符数组的相互转换. 字符串转换成字符数组: string ss="abcdefg"; char[] cc=ss.ToCharArray(); 字符数组转换成字符串: //char [] cc 定义同前段代码 string s=new string(cc);

字符串和字符数组之间的转换

package String; /* * 写了一个字符串和字符数组之间转换的例子 * 总结:将字符串转变为字符数组 :public char[] toCharArray() * 直接将一个字符数组变成一个字符串 public String (char[] value) 这个是构造函数啊,可以直接new 并为属性赋值啊. */ public class StringDemo2 { public static void main(String[] args) { String s = "hellow

比较C/C++和Delphi中的字符串和字符数组(数组和动态分配内存的情况)

本文所讲解的只是从其中一个方面来看待进行的总结,所以有必要结合<Delphi字符串与字符数组之间的转换(初始化的重要性)>等文章进行更全面的了解,会从更多方面来理解字符串.内存.类型转换 C/C++中的字符串.字符数组.字符指针分配的内存空间 我们知道在C/C++中,我们可以这样理解字符串和字符数组 1)字符串,就是一个以 '\0' 结尾的字符数组 2)字符数组,包括字符串,但是不一定要以 '\0' 结尾,如果不是以'\0' 结尾,那么就不能当做字符串使用 在C/C++中,使用字符串可以通过数

java 字符串与字符数组相互转换

public class ssssss { public static void main(String[] args){ String str1 = "Hello Java"; char c[] = str1.toCharArray();//将一个字符串变为字符数组toCharArray(); for (int i = 0; i<c.length;i++){ System.out.print(c[i] + ","); } System.out.println

java 字符串,字符数组,list间的转化

1.关于java.lang.string.split xxx.split()方法可以将一个字符串分割为子字符串,然后将结果作为字符串数组返回. 2.字符串转字符数组 String str =" aa.png,a2.png,a3.png"; String[] arrayStr =new String[]{}; arrayStr = str.split(","); 3.字符数组转list List list = java.util.Arrays.asList(array