目录

  • 字符串整体赋值问题
    • 一、指针式赋值法
    • 二、用strcpy()函数法
  • 字符串整体比较问题

字符串整体赋值问题

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

char a[10]="hello";
a="word";//这里是错误的不能整体赋值

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

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

一、指针式赋值法

#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;
}


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

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

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

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

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

char *p="hello;
printf("%s",p);


二、用strcpy()函数法

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

字符串整体比较问题


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

因为  a==b  判断的是其  a  和 b   的首地址是否相同
我们可以看到  a 和 b  的首地址不相同所以不会输出123

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

  • 一、可以逐个字符的比较
  • 二、用strcmp()函数来比较
    例:

字符串整体赋值和比较问题相关推荐

  1. 2020-11-30(为什么字符串可以赋值给字符指针变量)

    今天带着疑问去看了看字符指针,就一直在想为什么输出一个指向字符的指针,它输出的不是地址,而是字符,结果挖到了一个宝藏博客,然后结合了自身的想法,摘抄了大部分内容,最后我也把我自己的疑问给解决了,外加再 ...

  2. 自定义字符串变量赋值在查询语句中使用

    自定义字符串变量赋值后,如何在查询语句中使用? 比如: DECLARE @isforbid VARCHAR(1000) SET @isforbid = 'XXXXXX' SELECT * FROM t ...

  3. python批量读取文件赋值给一个参数_求助一个Python 循环读取文件,并对读到的字符串进行赋值,然后进一步生成json file 的方法。...

    求助一个Python 循环读取文件,并对读到的字符串进行赋值,然后进一步生成json file 的方法. 本来想用shell写,利用while read line do --done 但是这样json ...

  4. struct 结构体中字符串数组赋值的问题

    #include <stdio.h> #include <stdlib.h> #include <string.h>typedef struct STUDENT { ...

  5. JavaScript中字符串数组赋值失败,不是每个字符串,却是字符。

    我的处女作<Canvas系列教程>在我的Github上正在连载更新,希望能得到您的关注和支持,让我有更多的动力进行创作. 教程介绍.教程目录等能在README里查阅. 传送门:https: ...

  6. 对数组进行“整体赋值”

    数组是不可以整体赋值的,但常常需要用到数组的赋值,以避免写循环.这能否做到? C语言中能赋值的只有变量,只要让数组变量化,变量赋值时岂不捎带将数组完成了赋值?! 能含有数组的类型只有结构体.于是可以: ...

  7. C语言结构体能否整体赋值

    C语言结构体能否整体赋值 先放结论 可以将一个结构体变量的值赋给另一个具有相同结构的结构体变量,但是需要满足一个条件. 整体赋值规则 ansi/iso C规定:"相同类型的结构体是可以直接赋 ...

  8. C++ STL :vector动态数组可实现整体赋值

    vector 是 STL 库中很常用的工具,可以理解为一个动态数组. vector可以实现整体赋值 普通的数组,比如 int 数组,只能通过索引一个元素一个元素的赋值,在有些情况下十分不便,但是今天在 ...

  9. #C语言#字符串的赋值

    字符串的赋值 char *t = "title";char *s;s = t; 没有产生新的字符串,指针指向了同一个地方 字符串的输入输出--%s ·scanf只能读一个单词 ch ...

最新文章

  1. 每日一句英语:怎样回答美国人的How is it going问候语?
  2. Python机器学习入门资料整理
  3. Java 构造方法中super()的作用以及使用
  4. Android的单位px,pt,dp,sp总结和获取屏幕分辨率
  5. Vue的数据双向绑定和Object.defineProperty()
  6. HDU - 4292 Food(最大流+思维建边)
  7. sqlalchemy外键和relationship查询
  8. (转)基于MVC4+EasyUI的Web开发框架形成之旅--总体介绍
  9. 转textView return 键盘 textfield 键盘
  10. 冰原服务器维护,12月2日服务器公告:冰原旅途进发
  11. 国外经典!架构师必备:《MongoDB实战》第2版
  12. 【十一】Jmeter 函数助手实战:__time 时间戳函数
  13. 计算机网络---IP数据报组成计及IP模块工作流程
  14. HDU3123:GCC(同余模简单题)
  15. 数据结构排序系列详解之一 插入排序
  16. 1400协议是什么和28181区别_gb28181协议常见流程简析
  17. python把utf8编码转为gbk_Python:UTF-8编码转换成GBK编码
  18. 汽车电工及电子技术基础【2】
  19. snipaste和PS工具
  20. 前端基础之HTML特殊字符集和表情集

热门文章

  1. solr搭建分布式搜索引擎
  2. js中如何通过身份证号计算出生日期和年龄
  3. ADO.NET 【属性扩展】性别、年龄、编号
  4. 20145205《Java程序设计》课程总结
  5. Android近场通信---NFC基础(一)(转)
  6. java,UDP协议简单实现
  7. QT中Sqlite的使用
  8. KlayGE中的FXAA已经完成
  9. ON_MESSAGE,ON_COMMAND和ON_NOTIFY的区别和联系
  10. 膨胀卷积(Dilated convolution)