我一直在编写关于加密的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()
函数中的参数是否设置了代码中数组最小大小的限制?
答案 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'
不在那里,它会继续从数组读取它的界限导致上面提到的未定义的行为。