gpt4 book ai didi

c - 为什么我不能声明 unsigned char* test = "Some text"

转载 作者:太空狗 更新时间:2023-10-29 14:50:27 24 4
gpt4 key购买 nike

这在 visual studio 2010 中不起作用,它给了我以下错误

void main (void)
{
unsigned char* test = "ATGST";

}

编辑 1:我的问题是为什么这适用于嵌入式系统,但不适用于 PC?

enter image description here

但是当我把它改成:

 char* test = "ATGST";  

有效。

主要是我使用 C 为嵌入式系统编写代码,我使用 visual studio 来测试一些功能,这样我就不必在微 Controller 上实时测试它了。

我需要一个解释,因为微 Controller 接受第一个代码。

最佳答案

经过编辑以符合 C++ 标记的删除并安抚嵌入的标记。

首先,手头的问题是,您试图将 char[] 文字传递给 unsigned char*。您不能真正将 char 等同于 unsignedsigned,它在这方面有点特殊。此外,字符串文字被赋予唯一的存储空间,并且永远不应该被修改。如果要处理字符,则需要使用 标准 char*,其中 char[] 可以衰减到。你可以强行施放它,但我不喜欢推荐这样的东西。正如其中一条评论指出的那样,这样做是安全的。实际上,它实际上是真正无需考虑安全因素的稀有事物之一。

但是对于 reinterpret_casting 提供足够资格的严格答案来说,空间太小了,这基本上是在告诉编译器你知道你在做什么。这可能非常危险,只有在您非常确定手头的问题时才应该这样做。 char 通常只是通用的,甚至没有签名或未签名。由于 unsigned char 的范围比 char 大,并且通常 char 使用 signed char 的正子集来描述字符(或任何其他类型的适合的数据),如果您的数据不在扩展的正范围内,您一切顺利。但是,请遵守环境并安全地编写代码。

关于入口点函数-符合编辑

既然已经确定你在嵌入式系统上工作,这意味着你的程序很可能不需要返回任何东西,所以它可以保持 void main()(也可以是如果它需要给定嵌入式系统指定的非常不同的返回,OP 最了解他的系统强加的要求)。在很多情况下,你可以留在 void 的原因是因为没有环境/操作系统可以安抚,没有人可以与之沟通。但嵌入式系统也可能非常专业,最好通过详细研究给定平台来解决问题,以满足强加的要求(如果有的话)。

关于c - 为什么我不能声明 unsigned char* test = "Some text",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11269925/

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