首页 > 编程语言 > 详细

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

时间:2019-10-01 20:17:20      阅读:94      评论:0      收藏:0      [点我收藏+]
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);
    }
}

 

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

原文:https://www.cnblogs.com/yiyide266/p/11615789.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!