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

标签 c pointers memory-management malloc c-strings

(这个问题都是关于理论的)。

快速怀疑,我不知道该怎么办:我需要执行 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)。代码将变为:

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

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

最佳答案

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

首先是编译错误

if (sum > )
         ^^^

编译器指向它。

其次,该消息意味着您应该使用 size_t 类型,而不是变量 lengthint 类型。

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

请注意,sizeof( char )sizeof(signed char )sizeof( unsigned char ) 始终等于 1.

关于c - 关于动态分配字符串的一个小问题,我该如何解决?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71113770/

相关文章:

c++ - 在这个失败的 C++ 类实例化中,我忽略了什么明显的事情?

c++ - 这些清晰的函数在 C++ 中做同样的事情吗

java - 如何监控 Java 内存使用情况?

c - glibc的free()的内部工作原理

c - 在 C 中分配大内存(Project Euler Prob)

C 递归 Collat​​z 猜想,直到值小于原始整数

python - 在每个特定时间间隔后训练 ML 模型时的内存使用问题

c - printf 函数如何在输出时接受多个可变参数?

c - 正确释放结构

memory-management - iPhone 操作系统内存警告。不同级别意味着什么?