C 语言字符数组与休止符

C语言中的字符数组不强制以''结尾,这取决于定义方式。编译器会根据字符串常量来决定是否添加'',并影响数组长度。字符串处理时,末尾''的下标是数组长度减一,访问超过这个下标的元素会导致越界。为避免越界,建议使用字符串常量初始化字符串。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目中的休止符是指 '\0',因为 Windows 系统的文件名不能包含反斜杆,所以只能用中文描述。

在 C 语言中,字符数组不一定以 '\0' 结尾,是否有 '\0' 取决于定义的形式。

const char* s0 = "abc"; // s0[4], s0[2] = 'c', s0[3] = '\0'
char s1[] = "01234"; // s1[6], s1[4] = '4', s1[5] = '\0'
char s2[5] = "01234"; // error, s2[6]
char s3[6] = { '0', '1', '2', '3', '4', '5' }; // s3[5] = '5', no '\0'

总结:

  • 第一步,编译器会先看等号右边是否为字符串常量,如果是(比如上述程序前 3 行),则为该字符串常量的末端增添 \0,因此长度会加 1,如果不是(比如上述程序第 4 行),则不会添加 \0
  • 第二步,编译器会将数组的声明改为 name[T],中括号里的 T 是指总共有 T 个字符该字符串末端有 '\0''\0' 也会计入总数
  • 经过了以上两步之后,若字符串末端有 '\0',则 '\0' 的下标为 T-1,字符串最后一个有效元素的下标为 T-2;若字符串末端没有 '\0',则字符串最后一个有效元素的下标为 T-1。
  • 对数组 array[N] 进行处理时,若访问的元素下标为 N,则不管末端有没有 '\0',该访问的元素都会不在数组 array[N] 里边,即越界。
  • 由于 C 语言字符串处理库的很多函数都以 '\0' 作为处理结束标志,因此为了处理字符串时不发生越界,最好用字符串常量初始化字符串指针或字符数组,即采取上述程序的第一行或第二行的做法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值