1
4
你可以使用
|
2
1
使用它是危险的。由于存在从无符号char*到int*的隐式强制转换,如果数字大于0xff,则将使用堆栈中变量旁边的字节(max 3)并损坏它们的值。 %hhd的问题是,根据int的大小(不一定是4个字节),它可能不是1个字节。 似乎SScanf不支持将数字存储到char中,我建议您改用int。但是,如果您希望将char翻转过来,可以在后面将int转换成char,比如:
|
3
0
在大多数情况下,通过对整数使用char,可以节省一点到一点。 它通常依赖于体系结构和编译器,但大多数现代CPU在处理与寄存器大小不同的数据类型方面不是很好。(值得注意的例外是64位架构上的32位int。) 这里增加了对非CPU字对齐内存访问的惩罚(不要问我为什么CPU会这样做),char的使用应该限于实际需要char或内存消耗的情况。 |
4
0
这是不可能的。 SScanf在读取整数时永远不会写入单字节。 如果将指向单个已分配字节的指针作为指向int的指针传递,则会超出界限。由于默认对齐,这可能是可以的,但您不应该依赖于此。 创建临时文件。这样,您还可以运行时检查它。 |
5
0
可能最简单的方法是将数字简单地加载到一个临时整数中,并且仅当它在所需的边界中时才存储它。(你可能需要
|
6
0
这很危险。scanf将在字符大小的变量上写入整数大小的值。在您的示例中(很可能),除非重新组织堆栈变量,否则不会发生任何事情(在尝试写入整数大小的“dest”时,scanf将部分覆盖len,但随后它返回正确的“len”,并用“right”值覆盖len)。 相反,要做“正确的事情”,而不是依赖于编译器的情绪:
|
Community wiki · C中有哪些耗时的操作? 1 年前 |
Community wiki · 将所有处理器电源都投入到任务中 1 年前 |
Community wiki · C++为C添加了什么?[已关闭] 1 年前 |
Community wiki · 打印1到1000,不带循环或条件 1 年前 |