0

我正在尝试编写一个程序来读取 ID3 标签。到目前为止,我没有太多代码,因为我正在尝试学习如何使用 ID3 标签本身。我做了一个小程序,它会读取前三个字母并将它们打印回来,只是为了看看打开和关闭文件的过程是如何工作的,等等。

这是我的代码:

#include <stdio.h>

int main(int argc, char *argv[]) {

  char buf[4];

  if (argc == 2) {
    FILE *mp3 = fopen(argv[1], "r");

    fread(buf, 3, 1, mp3);
    buf[3] = "\0";
    printf("%s\n", buf);
    fclose(mp3);
    char a = buf[0];
    char b = buf[1];
    char c = buf[2];
    printf("%x\t%x\t%x\n", a, b, c);
  }
  return 0;
}

它设法打印出它应该打印的内容(ID3),但随后它会在 ID3 部分之后出现一些奇怪的字母。我添加了一个部分来打印它们的十六进制值。

我是 C 新手,我发现这很难理解。另外,我不太了解制作和管理字符串的所有不同方式之间的区别。因此,我将非常感谢有关此以及如何使其变得更好并向我解释原因等方面的任何帮助。

4

1 回答 1

0

将“\0”分配给 buf[3] 的部分是错误的。您应该使用单引号:

buf[3] = '\0';

原因是双引号表示字符串文字(它是一个以空结尾的 char 数组)而不是 char 变量。

于 2013-09-08T16:10:03.650 回答