【发布时间】:2014-08-13 09:10:55
【问题描述】:
我必须维护一个字符串数组,每个字符串都包含邻居的 IP 地址。出于某种原因,我需要将它们维护为字符串。
typedef struct _neighbors
{
int num_neigbors;
char **neighbor_address;
} neighbors;
假设我有两个邻居要添加。
我将char ** neighbor_address 视为char * 指针数组。
我知道我需要为neighbor_address[0] 和neighbor_address[1] 使用malloc 内存来存储他们的IP 地址。由于 IP 地址的格式为“x.y.z.w”,因此我将使用 malloc 或 7*sizeof (char)。
我的疑问是我应该为基础char **neighbor_address 分配多少内存。是不是应该是4个字节才能存储neighbor_address[0]的基指针IP地址?
我这样说是因为如果我不执行malloc 如下所示,我会得到SIGSEGV(分段错误):
neighbor_address = malloc (1, sizeof (char *));
我错过了什么?
【问题讨论】:
-
7 个字符(例如,
\0的 6 + 1)对于 IP 地址来说太少了,如果您想将其保存为字符串。 -
@mch:如果它是“x.y.z.w”形式的(这需要 7 个字符,外加一个零)。但这仅允许每个组件使用 1 位数字,这是不现实的场景。
-
@Jongware:除非您将每个部分转换为单个字节(因此它不是人类可读的)。
-
@Abrixas2:我在等别人说这个!不,这会使整个问题过时(使用指针和
malloc来获取可变字符串长度)。如所要求的,存储“形式”是 string 格式。
标签: c arrays string pointers malloc