关于动态分配字符串的小问题,我该如何解决?

little question about a thing when it comes to dynamically allocate a string, how can I solve?

(这道题全是理论题)

快速怀疑,我不知道该怎么做:我需要执行 malloc 来存储其长度加上 1 个零终止符的字符串。因此我必须写: char* str = malloc(length + 1),为了避免缓冲区overflow/buffer溢出,我想到了这个解决方案:

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)。代码将变为:

int sum = length + 1; 
if (sum > sizeof(char)) {
exit(1);
} else { /* same way */ }

但因为这种整数类型是机器相关的,它们的存储大小可能会有所不同,因此我认为我应该写成 int8_t,因为 stdint 函数总是具有相同的存储大小。你怎么看?

您错误地理解了编译器消息。

首先是编译错误

if (sum > )
         ^^^

编译器指向它。

其次,该消息意味着您应该使用 size_t.

类型,而不是变量 length 的类型 int

此消息与缓冲区溢出没有任何共同之处。这意味着表达式 length + 1 会导致整数溢出。

注意sizeof( char )sizeof( signed char )sizeof( unsigned char )总是等于1