首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >字符串整体赋值和比较问题

字符串整体赋值和比较问题

作者头像
Twcat_tree
发布2022-11-30 20:55:15
发布2022-11-30 20:55:15
63900
代码可运行
举报
文章被收录于专栏:二猫の家二猫の家
运行总次数:0
代码可运行

目录

字符串整体赋值问题

我们平常给一个字符串初始化了,但是后面我们想重新赋一个字符串却错误了,如下面的操作。

代码语言:javascript
代码运行次数:0
运行
复制
char a[10]="hello";
a="word";//这里是错误的不能整体赋值

  
  12

因为:数组名的实质是指针常量,你不能给一个指针常量修改。

那么如何给一个字符串整体的赋值呢? 解决方法:

一、指针式赋值法

代码语言:javascript
代码运行次数:0
运行
复制
#include<stdio.h>
int main()
{
	char *a="hello";
	a="world";
	printf("%s\n",a);
	printf("%c\n",*a);
	printf("%c\n",*(a+1));
    return  0;
}

  
  12345678910

我们可以看到 "hello " 已经改为 " world " 了。

代码语言:javascript
代码运行次数:0
运行
复制
对于语句  char *a="hello";
对于这个声明方式,会造成的误解是:声明了一个字符指针(它会指向一个位置),将“字符串”赋值给 指针表达式"*a"所指向的地址。
但正解是:声明了一个字符指针后,并用字符串常量的第一个字符的地址赋值给指针变量a。
即正确顺序是:1.分配内存给字符指针;2.分配内存给字符串;3.将字符串首地址赋值给字符指针; 
 这里有两点需要考虑清楚的地方:
① *a只是指向一个字符!
② 若字符串常量出现在在表达式中,代表的值为该字符串常量的第一个字符的地址。所以”hello”仅仅代表的是其地址

  
  1234567

这里有一点是特别不容易想通的 a是 char * 型 的也就是字符指针 为啥输出字符串时直接 a 就可以了 ,不应该用 星号(*) 取内容么?

代码语言:javascript
代码运行次数:0
运行
复制
这是因为:
%s它要求参数是一个指针!!!即: 要求 char * 类型
%s 字符串的格式输出, 它是一个接一个挨着输出, 直到遇见'\0'才中止
其实打印字符串时,程序內部是逐个字符来处理的,直到遇到空字符('\0')才停下来。
所以才需要传入地址,然后依次往后处理直到遇见空字符。

  
  12345

下面我以图解的方式来加深印象。 例:

代码语言:javascript
代码运行次数:0
运行
复制
char *p="hello;
printf("%s",p);

  
  12

二、用strcpy()函数法

用 strcpy() 函数来实现整体赋值

字符串整体比较问题

通过上图可以看出,a 和 b 的内容一样,为啥没有输出123呢?

代码语言:javascript
代码运行次数:0
运行
复制
因为  a==b  判断的是其  a  和 b   的首地址是否相同
我们可以看到  a 和 b  的首地址不相同所以不会输出123

  
  12

要想判断两个字符串是否相同

  • 一、可以逐个字符的比较
  • 二、用strcmp()函数来比较 例:
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-09-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 目录
  • 字符串整体赋值问题
    • 一、指针式赋值法
    • 二、用strcpy()函数法
  • 字符串整体比较问题
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档