gpt4 book ai didi

C 字符串空零?

转载 作者:太空狗 更新时间:2023-10-29 15:53:31 25 4
gpt4 key购买 nike

我有一个基本的 C 编程问题,情况如下。如果我正在创建一个字符数组,并且如果我想使用 %s 转换代码将该数组视为一个字符串,我是否必须包含一个空零。示例:

char name[6] = {'a','b','c','d','e','f'};
printf("%s",name);

控制台输出为:

abcdef

请注意,数组中的最后一个元素没有空零,但我仍将其打印为字符串。

我是编程新手...所以我正在阅读一本初学者 C 书,其中指出由于我没有在最后一个元素中使用空零,所以我不能将其视为字符串。

这与上面的输出相同,尽管我包含了零。

char name[7] = {'a','b','c','d','e','f','\0'};
printf("%s",name);

最佳答案

你只是运气好;可能在该数组结束之后,在堆栈上,有一个零,所以 printf 在最后一个字符之后停止读取。如果您的程序非常短,并且该堆栈区域仍“未开发”——即堆栈尚未增长到那个点——它很容易为零,因为现代操作系统通常会为应用程序提供初始为零的页面。

更正式地说:由于没有明确的 NUL 终止符,您将进入未定义行为的领域,这意味着任何事情都可能发生;这样的事情也可能是您的程序运行良好,但这只是运气 - 这是最糟糕的错误类型,因为如果它通常运行良好,则很难发现。

TL;DR 版本:不要那样做。坚持保证有效的方法,您就不会在应用程序中引入偷偷摸摸的错误。

关于C 字符串空零?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4424487/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com