Help... Output is a single char not a string...

Posted on 2006-06-29
Last Modified: 2010-04-24
Here is what I have...

unsigned char ItemName8[16];

struct Names
      unsigned char Name[16];
   } Zone[176];


*nm.Zone[ItemNumber8].Name = *ItemName8;

cppString = (const char *)nm.Zone[ItemNumber8].Name;
Memo1->AppendText("    Item Name: " + gcnew System::String(cppString.c_str()) + "\r\n");

My question is: when I output the ItemName8 directly, it will output the entire array. When I store the value of ItemNumber8 to the nm.Zone[].Name struct and output that, it just outputs the first char.

Any thoughts? Code is helpful...

Question by:demilune
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 5
  • 4
LVL 12

Expert Comment

ID: 17015192
>> *nm.Zone[ItemNumber8].Name = *ItemName8;
>> cppString = (const char *)nm.Zone[ItemNumber8].Name;

This two statements looks very strange to me.
ItemNumber8 is a char string.
But above you are using it as an index.
Why ?


Author Comment

ID: 17015251
I was told to do that... A friend said it would copy the entire char array and not just once char in the array.
LVL 12

Expert Comment

ID: 17015326
Can you post the complete code.
Free Tool: Postgres Monitoring System

A PHP and Perl based system to collect and display usage statistics from PostgreSQL databases.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.


Author Comment

ID: 17015348
My code is 1400 lines long... everything that is related to this issue is posted in the question...
LVL 12

Expert Comment

ID: 17015359
If you are trying to copy the string then do this
strcpy(nm.Zone[index].Name, ItemName8);
LVL 12

Expert Comment

ID: 17015361
Don't use ItemName8 as index.

Author Comment

ID: 17015370
When I do that, I get the compiler error:

error C2664: 'strcpy' : cannot convert parameter 1 from 'unsigned char [16]' to 'char *'
        Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
LVL 12

Accepted Solution

rajeev_devin earned 250 total points
ID: 17015377
Simply typecast it
strcpy((char*)nm.Zone[index].Name, (char*)ItemName8);

Author Comment

ID: 17015470
It works :)

If you don't mind, is there any other way to do it. The strcpy function was depreciated and I would like to stay with current "mothods" if possible...

warning C4996: 'strcpy' was declared deprecated
        C:\Program Files\Microsoft Visual Studio 8\VC\include\string.h(73) : see declaration of 'strcpy'
        Message: 'This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details.'

Featured Post

Secure Your Active Directory - April 20, 2017

Active Directory plays a critical role in your company’s IT infrastructure and keeping it secure in today’s hacker-infested world is a must.
Microsoft published 300+ pages of guidance, but who has the time, money, and resources to implement? Register now to find an easier way.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

The following diagram presents a diamond class hierarchy: As depicted, diamond inheritance denotes when two classes (e.g., CDerived1 and CDerived2), separately extending a common base class (e.g., CBase), are sub classed simultaneously by a fourt…
In Easy String Encryption Using CryptoAPI in C++ ( I described how to encrypt text and recommended that the encrypted text be stored as a series of hexadecimal digits -- because cyphertext may…

726 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question