main()参数搞乱了数组声明

时间:2015-02-27 12:36:56

标签: c arrays

我一直在编写关于加密的C学习计划,并遇到了一个意想不到的问题:

当我将参数包含到main()函数(作为int main(int argc, char* argv[]))并尝试在我的代码(char array[2] = {'a','b'};)中声明一个单独的字符数组时,这与{{main()无关。 1}}参数,该数组以某种方式获得长度为8而不是2,当我尝试将其打印出来时会添加一些垃圾(例如ab ?iQ?)。

如果我声明main()没有任何参数(int main()),则声明的char数组表现正常:获取大小为2并打印出ab

main()函数中的参数是否设置了代码中数组最小大小的限制?

1 个答案:

答案 0 :(得分:2)

在没有strlen()终止字节的char数组上使用nul会导致未定义的行为。

c中的字符串由一系列由nul终止的非nul字节组成 - > '\0'字节,所以这个

char array[2] = {'a','b'};

应该是

char array[3] = {'a', 'b', '\0'};

strlen()正常工作。

您可以像这样实施strlen()

size_t stringlength(const char *string)
  {
      size_t length;
      length = 0;
      while (string[length] != '\0')
          length++;
      return length;
  }

所以如果'\0'不在那里,它会继续从数组读取它的界限导致上面提到的未定义的行为。