我是C编程语言的新手,并且最近几天一直在学习它。我对终止字符如何工作以及为什么需要它感到困惑。当我看网上的一些文档时,它们通常说明我们初始化char数组时的最后一个字符必须为'\ 0'。但是,当我不将其插入char数组的末尾时,它似乎也可以编译并且运行良好。例如:
char test[4] = "test";
printf("%s\n", test );
printf("%lu\n", strlen(test) );
它会编译,正确打印出该值,并strlen返回正确的值,这意味着编译器知道char数组中的最后一个字符在哪里。那么为什么我们必须在末尾添加“ \ 0”。这只是惯例吗?还是还有别的?
谢谢。
您将test明确声明为四个字符的数组,因此它是四个字符的数组,其中包含't','e','s'和't'。
printf(“%s”)期望以零结尾的字符串,strlen也是如此。您有四个字符的数组,不包含零,因此将其传递给printf或strlen是未定义的行为。
由于数组后跟未知字节,因此下一个字节为零可能是纯巧合。如果是这种情况,则可能是打印了“ test”并且strlen()返回了4。但这纯属巧合。
还可能发生的是您的程序崩溃了。或打印“ testgarbagegarbagegarbage”并strlen返回大量数字。或者您的程序在开发过程中可以按预期的方式愉快地工作,并且在第一个付费客户使用它时崩溃。
您的代码具有未定义的行为,这意味着任何事情都可能发生。您可以通过声明char test [] =“ test”来解决此问题。这将使test []足够大以容纳四个字符和一个零字节。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句