【发布时间】:2018-12-08 10:39:36
【问题描述】:
我实现了一个简单的列表结构,其中单个列表元素由以下结构定义:
struct list_elem {
struct list_elem *next; // ptr to the next element
char *data; // ptr to data
};
现在,我想做以下事情:
struct list_elem *elem;
int main() {
elem->data = "some_string";
strcat(elem->data, "another_string");
}
我担心会溢出,因为 strcat 的手册页指出:
char *strcat(char *dest, const char *src)函数将src字符串附加到dest字符串,覆盖dest末尾的终止空字节('\0'),然后添加终止空字节。字符串不能重叠,dest字符串必须有足够的空间用于结果。 如果dest不够大,程序行为不可预测;缓冲区溢出是攻击安全程序的常用途径。
基本上我不知道为我的列表元素分配了多少内存。
【问题讨论】:
-
有办法知道分配了多少字节,前提是
data是malloc的结果:stackoverflow.com/a/1281720/6451573 -
对于您的列表元素:未分配内存。
elem是NULL。对于您的字符串:分配了 12 个字节 ('s', 'o', 'm', 'e', '_', 's', 't', 'r', 'i', 'n', 'g', '\0')。
标签: c string c-strings string-literals