|
| malloc og realloc en double-pointer Fra : Chris |
Dato : 18-05-04 22:59 |
|
Hvordan gør det?
Jeg vil gerne have en char **str;
Så vil jeg gerne allokere den og udvide den dynamisk.
int n = 0;
while (n < 10)
{
str[n] = strdup ("gylle");
n++;
}
Hvordan bruger jeg malloc og realloc til dette job?
Venligst
Chris
| |
Bertel Brander (18-05-2004)
| Kommentar Fra : Bertel Brander |
Dato : 18-05-04 23:22 |
|
Chris wrote:
> Hvordan gør det?
>
> Jeg vil gerne have en char **str;
> Så vil jeg gerne allokere den og udvide den dynamisk.
Måske noget i stil med:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
char **Strings;
int NumStrings;
char *MyStringDup(const char *d)
{
char *p = malloc(strlen(d) + 1);
return strcpy(p, d);
}
void Add(const char *s)
{
NumStrings++;
Strings = realloc(Strings, NumStrings*sizeof(char *));
Strings[NumStrings - 1] = MyStringDup(s);
}
int main(void)
{
int i;
Add("Ole");
Add("Gylle");
Add("Whatever");
for(i = 0; i < NumStrings; i++)
{
printf("%s\n", Strings[i]);
free(Strings[i]);
}
free(Strings);
return 0;
}
Bemærk at:
Jeg har udeladt fejlhåndtering.
Der er ingen strdup i standard C
Hvis du har adgang til C++ og STL er der noget lettere at
lave det med std::list & std::string
/b
| |
Bertel Brander (18-05-2004)
| Kommentar Fra : Bertel Brander |
Dato : 18-05-04 23:32 |
|
Bertel Brander wrote:
> Hvis du har adgang til C++ og STL er der noget lettere at
> lave det med std::list & std::string
>
Med std::vector og std::string kunne det se sådan ud:
#include <iostream>
#include <vector>
#include <string>
std::vector<std::string> List;
void Add(const char *s)
{
List.push_back(s);
}
int main(void)
{
std::vector<std::string>::size_type i;
Add("Ole");
Add("Gylle");
Add("Whatever");
for(i = 0; i < List.size(); i++)
std::cout << List[i] << std::endl;
return 0;
}
/b
| |
Igor V. Rafienko (19-05-2004)
| Kommentar Fra : Igor V. Rafienko |
Dato : 19-05-04 00:14 |
|
[ Bertel Brander ]
[ ... ]
> for(i = 0; i < List.size(); i++)
> std::cout << List[i] << std::endl;
Pfft...
std::copy(List.begin(), List.end(),
std::ostream_iterator<string>(cout, "\n"));
:)
[ ... ]
ivr
--
<html><form><input type crash></form></html>
| |
Chris (18-05-2004)
| Kommentar Fra : Chris |
Dato : 18-05-04 23:53 |
|
On Wed, 19 May 2004 00:21:59 +0200, Bertel Brander
<bertel@post4.tele.dk> wrote:
>Chris wrote:
>> Hvordan gør det?
>>
>> Jeg vil gerne have en char **str;
>> Så vil jeg gerne allokere den og udvide den dynamisk.
>
>Måske noget i stil med:
Og jeg siger tak.
Det var C-versionen, der gjorde det
Chris
| |
|
|