相关文章推荐
淡定的枇杷  ·  velocity的使用简介 - ...·  8 月前    · 
打酱油的莴苣  ·  (2018)苏01民初2523号 - ...·  1 年前    · 
想旅行的椰子  ·  mktime性能问题 - 知乎·  1 年前    · 
细心的台灯  ·  Socket.io 的 emit - ...·  2 年前    · 
Code  ›  C语言中既然'\0'与空格‘ ’是不一样的,那为什么在字符串问题中,scanf中还不能读入空格? - George 的回答 -
char 字符 c语言 scanf
https://www.zhihu.com/question/40600967/answer/87581882
有腹肌的玉米
2 年前
C语言中既然'\0'与空格‘ ’是不一样的,那为什么在字符串问题中,scanf中还不能读入空格?
George
George
一个典型的只知道编码的程序猿

--------2017.07.23更新--------

谢谢各位的支持,再这里重新整理一份。

在C语言中,字符串(ASCII字符串,不考虑C++的std::string等特殊字符串)实际存储为字符数组存储,所以以下表达式是成立的:

const char * str = "hello world!"; // 以字符数组指针变量接收字符串

这里先贴问题的答案核心: '\0'用于表示字符数组的结束,空格为缓冲区读取时的默认分隔符之一。

关于 '\0' 的具体含义解释

当存在字符数组长度大于字符串实际长度时,C语言在解析字符串时,将寻找字符数组的最后 '\0' 所在索引,而将其作为字符串的结束,并将其解析为一个字符串。

#include <stdio.h>
#include <stdlib.h>
int main(int argc, const char * argv[]) {
    char *strArr1 = (char *) malloc(12 * sizeof(char)); // 声明字符数组
    char *strArr2 = (char *) malloc(12 * sizeof(char)); // 声明字符数组
    int i = 0;
    const char * str = "Hello, World!\n"; // 以双引号标明的字符串,将默认在结尾加\0,即索引为14的字符为\0,其ASCII码为0
    printf("%d\n", str[14]); // 验证上述说法
    for (; i < 8; i++) {
        strArr1[i] = 'A' + i; // 为字符数组赋值,构建字符串
        strArr2[i] = 'A' + i;
    strArr1[11] = 0; // 赋值为0等价于赋值于\0
    printf("数组结尾加\\0:%s\n", strArr1);
    strArr2[i] = 0;
    printf("字符串结尾加\\0:%s\n", strArr2);
 
推荐文章
淡定的枇杷  ·  velocity的使用简介 - 自学java的小陈 - 博客园
8 月前
打酱油的莴苣  ·  (2018)苏01民初2523号 - 最高人民法院知识产权法庭
1 年前
想旅行的椰子  ·  mktime性能问题 - 知乎
1 年前
细心的台灯  ·  Socket.io 的 emit - node.js - SegmentFault 思否
2 年前
今天看啥   ·   Py中国   ·   codingpro   ·   小百科   ·   link之家   ·   卧龙AI搜索
删除内容请联系邮箱 2879853325@qq.com
Code - 代码工具平台
© 2024 ~ 沪ICP备11025650号