我有一個動態的結構,像這樣:char **應該是malloc大小(char *)還是char *字符串長度的大小?
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");
}
OR
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);
?
是的,它很重要,你使用。你需要分配一個指針數組,以及指向指針的數據。數據空間可能是單個分配或多個較小的分配;您可以通過任何方式適當地設置指針。 (只要您小心,單個分配可能會更好。)這由'char **'類型(符號)控制。如果你玩'char(* ips)[16];',答案會不同。 –