char ** 我应该分配 (char*) 的大小还是 char * 字符串长度的大小?

标签 c string

我有一个像这样的动态结构:

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/

相关文章:

c - 如何处理 execvp 中的错误?

c - 如何获取服务器程序的 IP 地址?

c - 当我直到运行时才知道有多少参数时,在 C 中使用 printf

java - 将字符串编码为 Base36

PHP:从字符串中提取数字的最佳方法

javascript - 元音消除困难

c++ - 有没有办法确定 sprintf 将写入多少个字符?

c - 如何将内存数据从指针复制到数组 ASSEMBLY 8086

c - 如何使用fopen在当前目录的文件夹内写入文件

ruby - 用一个字符替换Ruby字符串中的多个字符