[C]编译器对char数组声明的一个行为

2023-11-12

1 概述

如果使用char[]来声明char数组,那么编译器会自动计算后面的字面量字符数,再加上一个空字符,作为它的长度。实际上这个数组最后一位被编译器强行加上了\0:

#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>

#define BUFFSIZE 4096

int main(void)
{
    int fd_1 = open("./test_1.txt", O_RDWR);
    //为了改变fd_1的偏移值,输出一下fd_1的内容
    char str[BUFFSIZE];
    ssize_t n;
    //往test_1.txt写入一些信息
    char str_2[] = "|append";
    n = write(fd_1, str_2, sizeof(str_2));
    
    //最终的输出结果是"|append\0",在文本中,\0被当成了空格去显示
    lseek(fd_2, 0, SEEK_SET);
    while((n = read(fd_1, str, BUFFSIZE)) > 0){
        printf("%s\n", str);
    }
}

给数组加上长度,就可以解决上述"问题":

#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>

#define BUFFSIZE 4096

int main(void)
{
    int fd_1 = open("./test_1.txt", O_RDWR);
    //为了改变fd_1的偏移值,输出一下fd_1的内容
    char str[BUFFSIZE];
    ssize_t n;
    //往test_1.txt写入一些信息
    char str_2[7] = "|append";
    n = write(fd_1, str_2, sizeof(str_2));
    
    //最终的输出结果是"|append"
    lseek(fd_2, 0, SEEK_SET);
    while((n = read(fd_1, str, BUFFSIZE)) > 0){
        printf("%s\n", str);
    }
}

 

转载于:https://www.cnblogs.com/yiyide266/p/11615789.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

[C]编译器对char数组声明的一个行为 的相关文章

随机推荐

  • QT项目超详细打包教程

    一 将QT项目调成为release模式并运行程序 二 在QT中点击项目 三 复制项目的构建目录 四 进入项目的构建目录 找到release文件并进入 五 在release文件夹下新建一个文件夹 任意起名 六 将release文件夹下生成的可
  • Golang 切片删除指定元素的几种方法

    文章目录 1 截取法 修改原切片 2 拷贝法 不改原切片 3 移位法 修改原切片 3 1 方式一 3 2 方式二 4 性能对比 5 小结 参考文献 Go 并没有提供删除切片元素专用的语法或函数 需要使用切片本身的特性来删除元素 删除切片指定
  • C++中两个栈实现一个队列

    引言 首先看这个标题的时候 需要联想到栈和队列的特点 栈是先进后出 队列是先进先出 假如三个元素1 2 3 将这三个元素依次入栈1后 再将栈1中元素依次出栈放入到栈2中 栈1中只留下最后一个元素1 此时栈2中由两个元素 接下来获取栈1中的栈
  • QT-子线程访问主界面UI控件的有效方法

    引言 当软件需要导入大量数据文本时 若显示控件操作放在主界面UI线程中 会导致在导入数据的过程中存在界面卡死的现象 这种现象在工业控制工况中中是致命的 因此本文章旨在实现非UI子线程对UI主线程的操作 这里举一个简单的Demo 大文本数据通
  • 三款很酷很骚气的底部导航

    早上好 骚年 我是小菜 我的公众号 菜鸟翻身 会推荐 GitHub 上好玩的项目 一分钟 get 一个优秀的开源项目 挖掘开源的价值 欢迎关注我 底部导航栏是 APP 最常用的功能之一 想最初都是自己自定义 ViewGroup 实现 后来
  • PMBOK(第六版) PMP笔记——《第六章 项目进度管理》

    第 6 6 章 项目进度管理 项目进度管理包括为管理项目按时完成所需的各个过程 项目进度计划 Schedule 说明了项目如何以及何时交付项目范围中定义的产品 服务 和成果 创建 WBS 最底层得到的是工作包 但是为了更好的估算活动持续时间
  • SpringAOP学习--SpringAOP简介及原理

    前文对AOP做了介绍 实际项目中 一般不会直接上手手动实现aop 而是使用一些高级封装的aop实现 如SpringAOP Spring是一个广泛应用的框架 SpringAOP则是Spring提供的一个标准易用的aop框架 依托Spring的
  • vue props传Array/Object类型值,子组件报错解决办法(已解决)

    问题 Props with type Object Array must use a factory function to return the default value 1 在vue中如果当在父组件通过props传Array Obje
  • IPv6地址格式简介以及常见的IP地址

    toc 文章目录 1 IPv6地址格式 1 1首选格式 1 2 压缩格式 1 3 内嵌IPv4地址的IPv6 2 常见的IP地址 2 1 128 2 2 1 128 2 3 A B C D 2 4 FFFF A B C D 2 5 fe80
  • ElasticSearch入门学习笔记(2)--------Kibana语法学习

    ElasticSearch的ResultFul风格 基于Rest命令说明 原文链接 基础测试 创建一个索引 put 索引名 类型名 文档id 请求体 可以再head里面看到里面多了一个test1 从下面的图中可以看到本质上就是往里面put了
  • 如何在两个相关泛型类之间创建类似子类型的关系

    本文正在参加 金石计划 瓜分6万现金大奖 哈喽大家好 我是阿Q 事情是这个样子的 对话中的截图如下 看了阿Q的解释 你是否也和 马小跳 一样存在疑问呢 请往 看 我们都知道在java中 只要是类型兼容 就可以将一种类型的对象分配给另一种类型
  • vmware启动报错0xc000007b 解决方式

    1 官网下载vmwre 最新版后安装 2 运行vmwre报错结果如下 解决方法 安装最新版本C 运行库 VisualC2022 64 86 64位操作系统安装VisualC2022 64 86 32未操作系统安装VisualC2022 86
  • 【华为OD统一考试B卷

    在线OJ 已购买本专栏用户 请私信博主开通账号 在线刷题 运行出现 Runtime Error 0Aborted 请忽略 华为OD统一考试A卷 B卷 新题库说明 2023年5月份 华为官方已经将的 2022 0223Q 1 2 3 4 统一
  • c++中的vector的用法

    参考博客 https blog csdn net msdnwolaile article details 52708144 基本用法 如下代码 include
  • Flutter Image图片显示

    目录 参数详解 代码示例 效果图 完整代码 使用资源图片前必做两个步骤 1 在根目录下创建子目录 子目录中创建2 0x和3 0x 也可以创建4 0x 5 0x 但是2 0和3 0是必须的 目录 在对应目录中添加对应分辨率图片 图1 2 打开
  • 2020笔记本性价比之王_2020十大笔记本电脑性价比排行(最新笔记本电脑推荐)...

    2020十大笔记本电脑性价比排行 最新笔记本电脑推荐 1 HP 惠普 战99 15 6英寸笔记本电脑 2 Acer 宏碁 墨舞P50 15 6英寸笔记本电脑 3 HONOR 荣耀 MagicBook Pro 16 1英寸笔记本电脑 4 AS
  • C++中的Unicode编码:wchar, UTF-8,UTF-16,UTF-32

    C 在C11标准中加入了对Unicode编码的支持 新增了wchar t char16 t char32 t内置数据类型 cout lt lt sizeof char lt lt endl cout lt lt sizeof wchar t
  • 上传新文件项目到svn上

    一 在之前有svn项目的文件夹中检出 这一步主要是为了获得svn的仓库地址 二 在一个之前有的svn项目里面右键tortoiseSvn gt 版本库浏览器 就会出现这样的界面 然后在这个界面里右键里选择加入文件夹 选择本地的文件夹就可以了
  • Python剪刀石头布

    这是以前刚刚开始学习python时自己编的第一个小游戏 很简单 分享给大家 import random 胜 0 负 0 平 0 while True 对方 str random randint 1 3 我方 input 请选择你的出拳 剪刀
  • [C]编译器对char数组声明的一个行为

    1 概述 如果使用char 来声明char数组 那么编译器会自动计算后面的字面量字符数 再加上一个空字符 作为它的长度 实际上这个数组最后一位被编译器强行加上了 0 include