繁体   English   中英

如何将 nullterm 添加到 mmap() output 的末尾?

[英]How to add nullterm to end of mmap() output?

一般来说,我 go 如何在 mmap() output 的末尾添加一个 nullterm,以便我可以将其视为字符串? 在这被标记之前,我不想修改原始文件。 我试图将整个文件作为一个字符串获取,但是末尾缺少 nullterm \0使得任何正常的字符串操作都非常困难。 由于字符串文字存储在只读 memory 中,并且没有真正改变其大小的方法,我将如何处理它 go?

      int fd = fileno(fp);            // convert FILE struct to file descriptor
      char *src = mmap(0, file_size, PROT_READ, MAP_PRIVATE, fd, 0);

这是我的程序的基础。 我正在尝试对其进行大量文件操作,但对 output 的最后一个字符执行任何操作最终都会打印 memory 的随机值,因为没有 nullterm。

我想出了一个解决方法。 我写了一个 function,它只返回相同的字符串,但末尾有一个 nullterm。 它不会修改原件,而且无论如何都没有效率,但它适用于我需要做的事情。 我是一名学生,没有时间编写艺术上和逻辑上最完美的 C 代码,所以这里是有效的代码。

这个 function 需要字符串的大小作为参考,所以对于将来遇到我的问题的任何人,除了你不知道字符串的大小,那你就倒霉了

// s: string to add nullterm to
// sz: size of string.
char *add_nullterm(char *s, int sz) {
  int new_sz = sz + 1;
  char temp[new_sz];

  for (int i = 0; i < sz; i++) {
    temp[i] = s[i];
  }
  temp[sz] = '\0';

  char *out = (char*)temp;
  return out;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM