C - 我的程序在从文件中读取后打印出奇怪的东西

时间:2013-09-08 16:03:48

标签: c string printf fopen

我正在尝试为分配程序创建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的新手,我发现这很难理解。另外,我不太了解制作和管理字符串的所有不同方法之间的差异。所以我非常感谢有关这方面的任何帮助以及如何使其更好并向我解释为什么等等。

1 个答案:

答案 0 :(得分:0)

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

buf[3] = '\0';

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