首先,在语法上,三句都是正确的,但按照C语言中字符串的用法,第二句是错误的,可能导致无法预料的错误结果。

在C语言中,我们一般说的字符串,其实就是字符数组(区别于C++,Java等语言),而用类似char a[]这样的方式,定义的就是一个字符数组,所以是正确的。

C语言中我们这么规定字符串:从字符数组下标0开始存储字符串,在字符串结束后,下一个位置用字符'\0'作为结束标记,也就是说,数组长度应该是字符串长度+1。

下面解析一下这个程序:#include

#include

#include

int main()

{

char a[] = "abc";   // 定义一个字符数组,字符串长度为3,实际数组长度为4

// a[]没写数字的情况下编译器根据后边的"abc"推断出,字符串长度为3,数组长度为4

// 所以等效于 char a[4] = "abc"

char b[3] = "xyz";    // 手动制定数组长度为3,内容为"xyz",所以结尾没有'\0'

// 因为正好放得下"xyz",即使没有'\0',也没有错误或警告

// 但不符合C语言中字符串定义,可能导致错误!

char c[10] = "123456";    // 长度为10,只用了6+1=7个位置,稍浪费一些内存,但不会出错。

char d[3] = "ABCDEF";  // 长度真正超出范围,能编译,会有warning

printf("字符串a的长度是:%d, 内容是:%s \n", strlen(a), a);

printf("字符串b的长度是:%d, 内容是:%s \n", strlen(b), b);

printf("字符串c的长度是:%d, 内容是:%s \n", strlen(c), c);

printf("字符串d的长度是:%d, 内容是:%s \n", strlen(d), d);

return 0;

}

在我的运行环境下,a和c的结果正确,b的结果是"xyzabc",d的结果是"ABC123456",都是不可预料的结果。在其他编译器、运行环境下,a和c应当还是正确的,b和d结果可能有所不同。

总之,使用字符串时,需要按照C语言的规定来,才能有正确结果,否则即使能够通过编译,得到的结果也是不可预料的。所谓“自己亲手编程验证”,很可能有不完善的地方,不可作为正确与否的依据。

c 语言往字符数组里面赋值,关于c 语言字符数组的赋值相关推荐

  1. android 数组赋值字符串_c语言中的字符数组与字符串

    1.字符数组的定义与初始化 字符数组的初始化,最容易理解的方式就是逐个字符赋给数组中各元素. char str[10]={ 'I',' ','a','m',' ','h','a','p','p','y ...

  2. c语言字符数组赋值超过,C语言字符数组赋值

    C语言字符数组赋值教程 C语言字符数组赋值详解 语法 arr[index] = value; 参数 参数 描述 arr 数组名. index 需要赋值的下标索引. value 需要设置的值. 说明 给 ...

  3. C语言 —— 把字符指针中的字符串,存入字符数组中

    问题描述:有一个用字符指针表示的字符串char *str = "0 12";  有一个数组 char buf[128] = {0}; 现在需要将字符指针表示的字符串"0 ...

  4. c语言字符初始化怎么表示,C语言初始化字符串 怎么进行字符串赋值?C语言

    C语言数组字符串初始化问题 C语言中,初始化操作就是在定义变量的时候,对变量进行赋值,即称为变量的初始化.对于字符变量也是一样的. 举例如下: char ch='a'; // 定义一个字符变量,变量名 ...

  5. C语言:字符串API拷贝_strcpy(),strncpy,给(数组名)赋值字符串要用strcpy

    1.字符串的拷贝API:strcpy() 不能给数组名赋值字符串的情况,要用strcpy,具体的请看下面 因为数组名是常量,不能直接赋值字符串 数组名是常量-详解,点击跳转 字符串常量: 1.与字符数 ...

  6. c 语言定义2维字符串数组赋值,二维数组赋值字符串 c 语言 二维字符串数组赋值问题...

    C语言中二维字符数组应该怎样赋值? c语言二维数组如何定义字符串????急... 二维字符数组的定义格式为:char 数组名[第一维大小][第二维大小]; 例如:char c[3][10]; //定义 ...

  7. 国2c语言中指针与数组的赋值运算,C语言到汇编-指针与数组2

    本章剩下的内容主要有: 1.指针与数组 & 地址算术运算 2.字符指针与函数 3.多维数组 & 指针与多维数组 4.指向函数的指针 每个内容举一个例子,第一个例子: int a[10] ...

  8. strcmp可以比较数组么_6.3 C语言字符数组

    01字符数组的定义 1.用来存放字符数据的数组是字符数组.字符数组中的一个元素存放一个字符. 2.定义字符数组的方法和定义数值型数组的方法类似. 例子: char c[10]; 02 字符数组的初始化 ...

  9. C语言程序设计 | 指针的进阶(一):字符指针、数组指针、指针数组、函数指针

    指针的进阶(一)目录: 字符指针 数组指针和指针数组 函数指针 字符指针 在开始讲解这一章节之前,我们需要了解指针前面声明的类型的意义 类型 * 指针名 对于指针来说,我们在给指针进行声明时,我们声明 ...

最新文章

  1. 查表法生成流水号的示例.sql
  2. mockito mock void方法_用过举手!SpringBoot 单元测试利器Mockito
  3. EC20模组使用MQTT库对接EMQX,基于STM32F407
  4. 【Python基础入门系列】第05天:Python函数
  5. 8086指令系统 操作数地址,双操作数,单操作数,无操作数指令。一,传送类指令;二,二、算数运算类指令
  6. 爬取校园网新闻首页的新闻 使用正则表达式,函数抽离
  7. 命令行cmd跳转到其他地址
  8. 37. 使用accumulate或者for_each进行区间统计
  9. Qt Toast 一个淡出提示效果
  10. 测试于仕琪 libfacedetection人脸检测
  11. 分布式——分布式面试题
  12. IIC,SPI,I2S
  13. python假设检验和区间估计_用 Python 实现常用的假设检验
  14. 安装mysql忘了初始密码咋办_mysql安装忘记初始密码怎么办
  15. 电信联通提高手机补贴
  16. 微信小程序中如何将数据保存到内存中并且读取的同步写法
  17. unity 实现闪电特效
  18. [高频面试题]64匹马,8个赛道,找出跑得最快的4匹马
  19. Js做的城市三级联动,原创
  20. 【速览】2022年中国光伏逆变器行业市场现状及企业格局分析:行业需求增加,发展迅速[图]

热门文章

  1. 谷歌浏览器插件推荐:思维导图插件
  2. 微信 6.3.32 for Android发布 群收款微信群聊可以收钱
  3. 海鸥表表带太长了怎么拆_怎么拆表链,手把手教你怎么拆表链
  4. 单步跳入没有跳入源码_我如何抛弃旧操作系统并跳入Linux
  5. linux 创建共享目录
  6. 程序员怎么向上管理领导拿高绩效!
  7. JavaScript window 对象详解
  8. windows 10 C盘扩容记(含删除状态良好分区)
  9. C#中关于增强类功能的几种方式
  10. 孟晚舟当值华为轮值董事长后首次亮相 谈华为数字化战略|第一财经