为什么C输出这些克拉?

时间:2013-06-12 03:42:27

标签: c

我正在编写一个hex-to-base64编码器作为练习,因为我是C的新手。没关系为什么代码没有按照我想要的方式工作,为什么我会得到这些克拉字母组合在我的输出旁边?

const char * hex_to_base64(const char * s) {
  int i;
  for(i = 0; i < strlen(s)/3; i = i + 3) {
    char str[3];
    str[0] = s[i];
    str[1] = s[i+1];
    str[2] = s[i+2];
    printf("%s\n", str);
  }
  return NULL;
}

int main() {
  const char * x = "4453def6d206b696c6c696e6720796f757220627261696e206c696b652061222226f789436f6e6f5573206dabb7368726fa4b2";
  hex_to_base64(x);
  return 0;
}

我得到了这个输出:

445
3de^C
f6d^F
206 
b69^L
6c6^O
c69^R
6e6^U
720^X
796^[
f75^^
722!

有人可以解释为什么我会在printf结尾处获得克拉字母组合吗?

3 个答案:

答案 0 :(得分:3)

您将一个非零终止的字符串传递给printf()。变化:

char str[3];

char str[4];
str[3] = '\0';

更好的是,在循环外移动声明和零赋值。

答案 1 :(得分:1)

char str[3];
str[0] = s[i];
str[1] = s[i+1];
str[2] = s[i+2];
printf("%s\n", str);

str应该以null结尾。您必须将str声明更改为:

char str[4] = {0};

答案 2 :(得分:0)

其他人已经指出了你的程序中的错误,但你的问题是“为什么我得到克拉字母组合”,答案就是插入字母组合是你终端的各种非组合表示 - 您正在尝试打印的字符(由于上述错误)。