(这个问题都是关于理论的)。
快速怀疑,我不知道该怎么办:我需要执行 malloc 来存储其长度加上 1 个零终止符的字符串。因此我必须写: char* str = malloc(length + 1),为了避免缓冲区溢出/缓冲区溢出,我考虑了这个解决方案:
int sum = length + 1;
if (sum > char storage limit) {
exit(1);
} else {
char* str = malloc(length + 1);
NULL POINTER EXCEPTION CHECK.
}
好吧,这可行,但我不知道应该写什么而不是“字符存储大小”。
知道char取值范围是-128 编辑:也许,我可以这样使用 sizeof 运算符:sizeof(char)。代码将变为: 但是因为这种整数类型是与机器相关的,它们的存储大小可能会有所不同,因此我认为我应该写int8_t,因为stdint函数总是具有相同的存储大小。你觉得怎么样?int sum = length + 1;
if (sum > sizeof(char)) {
exit(1);
} else { /* same way */ }
最佳答案
您错误地理解了编译器消息。
首先是编译错误
if (sum > )
^^^
编译器指向它。
其次,该消息意味着您应该使用 size_t
类型,而不是变量 length
的 int
类型。
此消息与缓冲区溢出没有任何共同之处。这意味着表达式 length + 1
可能会导致整数溢出。
请注意,sizeof( char )
、sizeof(signed char )
和 sizeof( unsigned char )
始终等于 1
.
关于c - 关于动态分配字符串的一个小问题,我该如何解决?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71113770/