linux符号模式,1、Linux下的奇怪符号 ^@

最近一直在研究Linux操作,从内心来说,我觉得这个操作系统很有意思,而且拓宽了我局限于C#的思维模式,Tres bien!

学习过程中也遇到一些各种各样奇怪的问题,网上搜索后好像大家也没有一个确切的说法。因此在这里,我打算把我遇到的比较有意思的问题写在博客中,是自己的思考和实验,希望对大家有益。

本文要讲的就是这个看似奇怪的 ^@ 符号。

先上代码:

#include

#include

#include

#include

#include

#include

int main(void)

{

int fd = open("mytest.txt",O_CREAT|O_RDWR,0644);

if(fd<0){perror("open file error\n");exit(-1);}

char *p = NULL;

int len = 5;

int ret = ftruncate(fd,len); //传4个字节

if(ret<0){perror("ftruncate error\n");exit(-1);}

p = mmap(NULL,len,PROT_READ|PROT_WRITE,MAP_SHARED,fd,0);

if(p==MAP_FAILED){perror("mmap error\n");exit(-1);}

strcpy(p,"abc\n");//通过指向映射内存区的指针p来操作映射内存空间

ret = munmap(p,len); //释放映射区

if(ret==-1){perror("munmap error\n");exit(-1);}

close(fd);//关闭被映射的磁盘空间指针(文件)

return 0;

}

这段代码主要是通过mmap来实现磁盘映射内存空间的功能。我将"abd\n"这个字符串映射到内存中对应的磁盘空间上(也就是那个mytest.txt文件中),结果用vi打开看到是这样的:

0818b9ca8b590ca3270a3433284dd417.png

可以看到在abc下面多了一个^@字符。这是怎么回事呢?

我发现主要是len的关系,上面我使用的是len=5,我原本的打算是"abc\n"后面还要给'\0'分配一个字符位置,因此len用的是5。结果就是多了一个 ^@ 字符。如果将len改为4,则不会有上面所说的问题,结果如下:

0818b9ca8b590ca3270a3433284dd417.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值