首页 > 其他分享 >字符串

字符串

时间:2023-12-06 16:22:06浏览次数:29  
标签:初始化 const car char 数组 字符串

·字符串

一、字符串的一些特点

1.从ANSI C标准起,如果字符串面量之间没有间隔,或者用空白字符分隔,C会将其视为串联起来的字符串面量。

char greeting[50] = "Hello,and""how are""you""today!";
//等价于
char greeting[50]="Hello,and how are you today!";

2.如果要在字符串内部使用双引号,必须在双引号前面加上一个反斜杠()

printf("\"Run ,Spot, run!\"exclaimed Dick.\n")
//输出如下
"Run , Spot, run!"exclaimed Dick.

3.字符串属于静态存储类别,这说明说如在函数中使用字符串常量,该字符串只会被储存一次,在整个程序的生命期内存在,即使函数被调用多次。用双引号括起来的内容被视为指向该字符串储存位置的指针。这类似于把数组名作为指向该数组位置的指针。

//把字符串看成指针
#include<stdio.h>
int main(void)
{
    printf("%s,%p,%c\n","We""are"*"space farers");
    
    return 0;
}
//输出
//We, 0x100000f61, s  其中0x100000f61是a的地址

注:字符数组名和其他数组名一样,是该数组首元素的地址。

char car[0] = "Tata";
//那么
car == &[0]
*car == 'T'
*(car+1) == car[1] == 'a'    

二、字符串数组和初始化

定义字符串数组时,必须让编译器知道需要多少空间。

1.用足够空间的数组储存字符串

const char m1[40] = "Limit yourself to one line's worth.";
//const表明不会更改这个字符串
//下面是标准的数组初始化形式
const char m1[40] = {""L","i","m",""""""""""",".","\0"";}
//注意最后的空字符串,没有这个空字符,这就不是一个字符串,而是一个字符数组。

注:在指定数组大小时,要确保数组的元素个数至少要比字符串是长度多一(为了容纳空字符)

所有未被使用的元素被自动初始化为0(这里的0指的是char形式的空字符,不是数字字符0)

2.让编译器确定数组的大小

const char m2[] = "If you can't think of anything, fake it.";

注:让编译器计算数组的大小只能用在初始化数组时,如果创建一个稍后再填充的数组,就必须在声明时指定大小。

声明数组时,数组大小必须是可求值的整数。在C99新增变长数组之前,数组的大小必须是整型常量,包括由整数常量组成的表达式。

int n = 8;
char cookies[1];	//有效
char cakes[2 + 5];  //有效,数组大小是整型常量表达式
char pies[2*sizeof(long double) + 1];//有效
char crumbs[n];		//C99标准之前无效,C99之后这种数组是变长数组

补:还可以用指针表示法创建字符串

const char * pt1 = "Something is pointing at me"
//该声明与下面的声明几乎相同(不是完全相同)
const char ar1[] = "Something is pointing at me.";

标签:初始化,const,car,char,数组,字符串
From: https://www.cnblogs.com/lttlmylove/p/17879811.html

相关文章

  • evalFn 字符串转执行函数 附带JSONParse函数
    constevalFn=(fn)=>{varFun=Function//一个变量指向Function,防止前端编译工具报错returnnewFun('return'+fn)()}/****JSON反序列化,支持函数和undefined*@paramdata*/constJSONParse=(data)=>{returnJSON.parse(data,(k......
  • java字符串String类的常用方法
    java字符串String类的常用方法字符串的创建:(1)定义字符串直接赋值,在字符串池中开辟空间()Stringstr1=“Hello”;//在字符串池中写入字符串"hello"Stringstr2=“Hello”;//直接引用字符串池中的"Hello"System.out.println(str1==str2);//地址相同,输出:true(2)使用new关键字......
  • 从字符串中分离文件路径,文件名及文件扩展名
    从字符串中分离文件路径,文件名及文件扩展名如一个文件:D:\文档\C#BASE\StringBuilder.md要分离出文件路径:D:\文档\C#BASE\文件名:StringBuilder文件扩展名:md这是我们要拿到“\”和“.”这两个字符最后出现的索引stringpath="D:\文档\C#BASE\StringBuilder.md";inti=path.la......
  • C#中如何去掉字符串所有空格
    在字符串操作中Trim方法只能去掉字符串对象前端和后端的空格,但是,如果空格出现在中间如何去除呢?这里可以使用StringBuilder来操作字符串,StringBuilder操作字符串无疑是最为方便高效的。现在利用StringBuilder类中的Replace方法去掉字符串中所有的空格。replace替换stringstr......
  • 带通配符的字符串匹配
     http://ica.openjudge.cn/function1/3/   constintN=1004;intn,m,f[N][N];chara[N],b[N];signedmain(){ inti,j; cin>>a+1>>b+1; n=strlen(a+1);m=strlen(b+1); for(i=1;i<=n;i++) if(a[i]=='*')f[i][0]=1; ......
  • 01-字符串
    课程:字符串目标认识字符串下标切片常用操作方法一.认识字符串字符串是Python中最常用的数据类型。我们一般使用引号来创建字符串。创建字符串很简单,只要为变量分配一个值即可。a='helloworld'b="abcdefg"print(type(a))print(type(b))注意:控制台显示结果......
  • CTFpwn格式化字符串两种应用及2023ISCTF的fmt题解wp
    三个例子的引入目前我遇到的格式化字符串漏洞(formatstring,后文简称fmt)主要存在于printf函数,本文也就以printf举例。例一,标准格式的printf read(0,buf,33);printf("%s",buf);例二,占位符与变量 printf("%d%c%s",a,b,c);//%d%c%s会访问变量以输出整型,字符等。其中a,b,c为三......
  • cw 字符串专题
    KMP和AC自动机都只会背板子怎么办啊/kk。模板AC自动机不会,但我会背板子。for(inti=0;i<26;i++)ch[0][i]=1;queue<int>q;q.push(1);while(!q.empty()){intu=q.front();q.pop();for(inti=0;i<26;i++)if(!ch[u][i])ch[u][i]=ch[fail[u]][i];......
  • template包 字符串函数
    字符串函数https://blog.gmem.cc/gotpl函数说明abbrev缩写参数,超出的字符以...代替。例如 abbrev 5 "helloworld"输出 he...abbrevbothabbrevbothNSTR:从双侧缩写trunctruncNSTR:截断到指定长度trim去除空白trimAlltrimAllTSTR:去除所有指定......
  • 代码随想训练营第五十六天(Python)| 583. 两个字符串的删除操作、72. 编辑距离
    583.两个字符串的删除操作classSolution:defminDistance(self,word1:str,word2:str)->int:n,m=len(word1),len(word2)#dp数组代表使得word1以i-1结尾和word2以j-1结尾相同的最小步数dp=[[0]*(m+1)for_inrange(n+......