Re: C coding

Marc Hunter <marc-G5HfMHItY0AlJZD/[email protected]>
Newsgroups gmane.comp.lang.as400.c
Message-ID <[email protected]>
ouch.

Something you could try is defining the string parm in the RPG procedure 
definition as follows:

D Parm * value options(*STRING)

Then in the C/C++ code you can do this:

extern "C" int DoSomething(char * szParm)
{
string myStringParm = szParm;

// move on into OOP world here...

It keeps the RPG relatively simple, and the char *'s are converted to 
strings as early as possible. A few extra copies of the data, but in 
most cases the simplicity is worth it (imo).

Marc


On 2/13/2014 9:43 AM, Tim Bronski wrote:
> Yes, but the statement was the attempt to create a c++ string from a
> parameter passed from....an RPG program!
>
> On 2/13/2014 6:36 PM, Marc Hunter wrote:
>> While I empathize, and certainly C++ also allows you to shoot yourself
>> in the foot, the code shown is philosophically (imo) a mix of C and C++
>> in that it uses char *s. Assuming both variables are strings then I
>> would code it as follows and avoid dipping into 'dangerous' char *
>> territory.
>>
>> partName.insert(0, userName.substr(start, len));
>>
>> (If I'm understanding the objective correctly)
>>
>> Marc
>>
>> On 2/13/2014 9:02 AM, Tim Bronski wrote:
>>> On 2/13/2014 5:23 PM, Jon Paris wrote:
>>>> I would have said that C was brilliant if your aim was to shoot yourself in the foot and C++ does a better job of protecting you.
>>> Hi Jon, I would have let that slide but I've just finished tracking down
>>> a bug where c++ was using a different overloaded string function than
>>> the one intended. Here's what the statement should have been:
>>> partName.insert(0, &userName[start],  len);
>>> but instead it was
>>> partName.insert(0, userName[start],  len);
>>>
>>> This compiles fine but the result was heinous...the c compiler would
>>> have caught that one.

-- 
This is the Bare Metal Programming IBM i (AS/400 and iSeries) (C400-L) mailing list
To post a message email: C400-L-Zwy7GipZuJhWk0Htik3J/[email protected]
To subscribe, unsubscribe, or change list options,
visit: http://lists.midrange.com/mailman/listinfo/c400-l
or email: C400-L-request-Zwy7GipZuJhWk0Htik3J/[email protected]
Before posting, please take a moment to review the archives
at http://archive.midrange.com/c400-l.
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.