我有一个像这样的动态结构:
struct network {
int count;
char** ips;
}
如果我知道每个字符串数组都是 16 个字节(即 INET_ADDRSTRLEN
),因为它们是 IPv4 地址,如果我使用 sizeof(char*) * count
进行分配是否重要> 或 sizeof(char) * INET_ADDRSTRLEN * count
?
例如:
// n is a pointer to a network
n->ips = realloc(n->ips, sizeof(char*) * n->count);
for (int i =0; i< n->count; i++){
n->ips[i] = malloc(INET_ADDRSTRLEN);
strcpy(n->ips[i], "127.0.0.1");
}
或
n->ips = realloc(n->ips, sizeof(char) * INET_ADDRSTRLEN * n->count);
for (int i =0; i< n->count; i++){
n->ips[i] = malloc(INET_ADDRSTRLEN);
strcpy(n->ips[i], "127.0.0.1");
}
此外,如果我采用第二种方式,我是否需要执行 n->ips[i] = malloc(INET_ADDRSTRLEN);
?
最佳答案
ips指向一个char *数组,所以它的buffer必须是sizeof(char *)的倍数,而不是sizeof(char)的倍数。
关于char ** 我应该分配 (char*) 的大小还是 char * 字符串长度的大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41810712/