1,105,380 Community Members

C++ to C

Member Avatar
Labdabeta
Master Poster
769 posts since Feb 2011
Reputation Points: 161 [?]
Q&As Helped to Solve: 42 [?]
Skill Endorsements: 6 [?]
 
0
 

I have some code in C++ that uses an std::vector of std::strings to store an array of strings. I need to convert it into C. I thought that I would just create c versions of the functions I need (vector.back,vector.push_back,string.operator+=) but am getting lost in the double pointers. Can anybody lead me on the right track here?

Member Avatar
deceptikon
Eternally Awesome
4,693 posts since Jan 2012
Reputation Points: 1,341 [?]
Q&As Helped to Solve: 688 [?]
Skill Endorsements: 104 [?]
Administrator
Featured
 
0
 

std::vector and std::string do a lot of work internally. You'd probably be better off converting the 'what' instead of the 'how'. Ask yourself what the code is trying to accomplish and write C code to do it.

Member Avatar
Labdabeta
Master Poster
769 posts since Feb 2011
Reputation Points: 161 [?]
Q&As Helped to Solve: 42 [?]
Skill Endorsements: 6 [?]
 
0
 

I was thinking of rather than storing a char** to store a single char* string with some delimiting character. I really need a dynamic array of strings so I do not see any other choice.

Member Avatar
deceptikon
Eternally Awesome
4,693 posts since Jan 2012
Reputation Points: 1,341 [?]
Q&As Helped to Solve: 688 [?]
Skill Endorsements: 104 [?]
Administrator
Featured
 
0
 

You're focusing too much on the 'how'. Explain what the program does and someone can help make suggestions.

Member Avatar
L7Sqr
Veteran Poster
1,006 posts since Feb 2011
Reputation Points: 179 [?]
Q&As Helped to Solve: 168 [?]
Skill Endorsements: 11 [?]
 
0
 

Consider why you must convert to C. I cont see many reasons where C would be necessary over C++.

Member Avatar
Ancient Dragon
Achieved Level 70
27,645 posts since Aug 2005
Reputation Points: 5,232 [?]
Q&As Helped to Solve: 3,038 [?]
Skill Endorsements: 115 [?]
Team Colleague
Featured
Sponsor
 
1
 

It's not all that difficult to do. Here's an example of push_back

const int BlockSize = 10; // allocate this number of elements at one time
int MaxArraySize = 0; // initial size of the array
int CurrentSize = 0; // current number of elements used in the array

char** array = 0; 

void ReallocArray()
{
   MaxArraySize += BlockSize;
   array = realloc(array,MaxArraySize);
}

char* push_back(const char* item)
{
    if( (CurrentSize+1) >= MaxArraySize )
    {
       ReallocArray();
    }
    array[CurrentSize] = malloc(strlen(item)+1);
    strcpy(array[CurrentSie], item);
    ++CurrentSize;
}
You
This article has been dead for over three months: Start a new discussion instead
Post:
Start New Discussion
View similar articles that have also been tagged: