关于字符串

一些基本概念

用字符数组保存这么一个字符串:

char str[] = "hello world";
然后我们应该知道,

1.数组的大小是12(字符串字符个数+1),最后一个元素为'\0',用于标记字符串的结束。'\0'不是数字0,它是非打印字符,其ASCII码值为0

2.若使用如下定义:

char str[100] = "hello world";
则多余元素的值均默认为'\0'
3.使用scanf时,该函数会自动将'\0'插入在字符串末尾(所以你不必输入,也无法输入)


字符数组和指向字符串的指针

下面两种定义都是可行的:

char str[] = "hello world";
char * ps = "hello world";
但也有不同之处,如:

str[4] = 'p';  //可以
ps[4] = 'p';  //错误

这个问题不同于整型数组和整型指针,根源在于字符串常量:字符串常量被存放于静态存储区

编译器会为字符数组str[]开辟一片内存空间,并把静态存储区中的字符串常量"hello world"拷贝过去;而指针ps只是单纯地指向静态存储区,上述修改可能会产生一些问题:

  • 字符串常量可能被放置在只读区域
  • 可能有其他指针指向该字符串常量,若被修改则所有指针都会受到影响
因此编译器禁止这么做(奇怪的是gcc可通过,但运行时会段错误)


常用字符串函数

size_t strlen(const char * str);  //返回字符串长度(不计算'\0'在内)
char * strcpy(char * str1, const char * str2);  //将str2拷贝至str1中(包括'\0'),同时返回str1
char * strcat(char * str1, const char * str2);  //把str2拷贝至str1底部(str1原有的'\0'被覆盖),同时返回str1
int strcmp(const char * str1, const char * str2);  //比较两个字符串,若str1<str2则返回值小于0
关于字符串比较原则:按ASCII码值大小比较,如:'A' < ... < 'Z' < 'a' < ... < 'z'



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值