473,406 Members | 2,698 Online
Bytes | Software Development & Data Engineering Community
Post Job

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 473,406 software developers and data experts.

Casting char to char*

How do I cast or promote a char variable to a char* variable? For
example, I want to use strcat to append a character to an existing
"string". (BTW, I'm not able to use STL string or CString data
types...) TIA
Sep 19 '05 #1
9 3797
"Michael R. Copeland" <mr*****@cox.net> wrote in message
news:MP************************@news.west.cox.net. ..
How do I cast or promote a char variable to a char* variable? For
example, I want to use strcat to append a character to an existing
"string". (BTW, I'm not able to use STL string or CString data
types...) TIA


char CharStr[20];
strcpy(CharStr, "Test";
char SomeChar = 'A';

char TempStr[2];
TempStr[0] = SomeChar;
TempStr[1] = '\0';

strcat( CharStr, TempStr );

That's one way.
Sep 19 '05 #2
> How do I cast or promote a char variable to a char* variable? For
example, I want to use strcat to append a character to an existing
"string". (BTW, I'm not able to use STL string or CString data
types...) TIA


A char is a char. A char* often is either a pointer to a single char or,
much more often, a pointer to a zero-terminated char array (AKA a C-style
string).

And so, let's bear in mind that string functions such as concat operate on
strings not chars.

You can have a string that contains only one character (not counting the
terminating zero, if any).

You should be able to use std::string, like so:

#include <string>
#include <iostream>

int main()
{
using std::string;
using std::cout;

string str = "a";
char c = 'b';

str += c;
cout << str; // outputs "ab"
}

Regards,
Ben
Sep 19 '05 #3
The thing is, you can't realy.
If you have
char ch = 'a';
the only the you can do to cast it to char* is to copy it to a 2 byte
array as described below...

Sep 19 '05 #4
"Michael R. Copeland" <mr*****@cox.net> wrote in message
news:MP************************@news.west.cox.net. ..
How do I cast or promote a char variable to a char* variable? For
example, I want to use strcat to append a character to an existing
"string". (BTW, I'm not able to use STL string or CString data
types...) TIA


In addition ot the other comments, it seems very dangerous to cast a char to
a char *; the size of the char * is generally larger than the size of char.

You can do something like this:

char a = 'a';
char *b = &a;

However, if you wanted to use strcat, b is not null terminated and would
likely cause strcat to malfunction.

If a function such as strncat is available to you, you could do something
like

strncat(dest, b, 1);

which appends on character from 'b' to dest.
Sep 19 '05 #5
> The thing is, you can't realy.
If you have
char ch = 'a';
the only the you can do to cast it to char* is to copy it to a 2 byte
array as described below...


I don't see anything "below". That's my question - how _do_ I make
the cast so I can strcat (or wharever) the character?
Sep 20 '05 #6
"Michael R. Copeland" wrote:
The thing is, you can't realy.
If you have
char ch = 'a';
the only the you can do to cast it to char* is to copy it to a 2 byte
array as described below...


I don't see anything "below". That's my question - how _do_ I make
the cast so I can strcat (or wharever) the character?


As has been pointed out: You can't. Well, technically you can, but it doesn't do
you no good. strcat doesn't expect just a pointer. strcat expects a pointer
to an array and that array must be 0-terminted. A single character isn't 0
terminated, thus strcat will do fancy things.

All you need to do is set up a 2 element array, copy your character into
the first position, make sure the C-style string is 0-terminated and there
you go: strcat() does the right thing:

char ch = 'a';
char tmp[2];
tmp[0] = ch;
tmp[1] = '\0';
strcat( to_whatever, tmp );

--
Karl Heinz Buchegger
kb******@gascad.at
Sep 20 '05 #7

"Michael R. Copeland" <mr*****@cox.net> schrieb im Newsbeitrag
news:MP************************@news.west.cox.net. ..
How do I cast or promote a char variable to a char* variable? For
example, I want to use strcat to append a character to an existing
"string". (BTW, I'm not able to use STL string or CString data
types...) TIA


char some[128]="";
char add='a';

strcat(some, (char*)&((short)add<<8));
Sep 20 '05 #8
Gernot Frisch wrote:

"Michael R. Copeland" <mr*****@cox.net> schrieb im Newsbeitrag
news:MP************************@news.west.cox.net. ..
How do I cast or promote a char variable to a char* variable? For
example, I want to use strcat to append a character to an existing
"string". (BTW, I'm not able to use STL string or CString data
types...) TIA


char some[128]="";
char add='a';

strcat(some, (char*)&((short)add<<8));


To say it with the words of my compiler:
error C2102: '&' requires l-value

--
Karl Heinz Buchegger
kb******@gascad.at
Sep 20 '05 #9
"Karl Heinz Buchegger" wrote:
Gernot Frisch wrote:
"Michael R. Copeland" schrieb:
How do I cast or promote a char variable to a char* variable? For
example, I want to use strcat to append a character to an existing
"string". (BTW, I'm not able to use STL string or CString data
types...) TIA


char some[128]="";
char add='a';

strcat(some, (char*)&((short)add<<8));


To say it with the words of my compiler:
error C2102: '&' requires l-value


Even if one changes the code so that the construct is an
l-value and will compile, it still won't work on a little-endian
system (such as windows), in which 0x6100 looks like "0x0061"
in memory, which, as a string, is "\0a", which is the empty string.

It works if you get rid of the shift:

#include <iostream>
#include <cstring>
using std::cout;
using std::endl;
int main()
{
char Text[128] = "fjwux";
cout << "Original string = " << Text << endl;
short Add = (static_cast<short>('a')); // 0x0061, little-endian 0x6100
strcat(Text, reinterpret_cast<char*>(&Add)); // concatenates "a/0"
cout << "Add = " << std::hex << std::showbase << Add << endl;
cout << "Combined string = " << Text << endl;
return 0;
}

That prints:

Original string = fjwux
Add = 0x61
Combined string = fjwuxa

It works (at least, on little-endian systems), but it's very
messy and brittle.

Much better is:

std::string Text ("fjwux");
Text += 'a';
cout << Text << endl;

--
Cheers,
Robbie Hatley
Tustin, CA, USA
email: lonewolfintj at pacbell dot net
web: home dot pacbell dot net slant earnur slant
Sep 21 '05 #10

This thread has been closed and replies have been disabled. Please start a new discussion.

Similar topics

231
by: Brian Blais | last post by:
Hello, I saw on a couple of recent posts people saying that casting the return value of malloc is bad, like: d=(double *) malloc(50*sizeof(double)); why is this bad? I had always thought...
19
by: Ramesh Tharma | last post by:
Hi, Is any one knows what's wrong with the following code, I was told that it will compile and run but it will crash for some values. Assume that variables are initilized. char* c; long*...
14
by: mr_semantics | last post by:
I have been reading about the practise of casting values to unsigned char while using the <ctype.h> functions. For example, c = toupper ((unsigned char) c); Now I understand that the standard...
2
by: Alex Vinokur | last post by:
classes that have virtual methods hold pointer to virtual table as additional implicit data member. So, sizeof of such classes is sizeof of all data (as struct-POD) plus 4. It seems that use of...
5
by: brekehan | last post by:
I've always been a little sketchy on the differences between static, dynamic, and reinterpret casting. I am looking to clean up the following block by using C++ casting instead of the C style...
24
by: Francine.Neary | last post by:
I've read that you should always cast the argument you pass to isupper(), isalnum(), etc. to unsigned char, even though their signature is int is...(int). This confuses me, for the following...
17
by: sophia.agnes | last post by:
Hi , I was going through peter van der linden's book Expert C programming, in this book there is a section named "How and why to cast" the author then says as follows (float) 3 - it's a...
32
by: alex.j.k2 | last post by:
Hello all, I have "PRECISION" defined in the preprocessor code and it could be int, float or double, but I do not know in the code what it is. Now if I want to assign zero to a "PRECISION"...
101
by: Tinkertim | last post by:
Hi, I have often wondered if casting the return value of malloc() (or friends) actually helps anything, recent threads here suggest that it does not .. so I hope to find out. For instance : ...
10
by: Alex Vinokur | last post by:
Hi, Is it possible to do C++-casting from const pair<const unsigned char*, size_t>* to const pair<unsigned char*, size_t>* ? Alex Vinokur
0
by: Charles Arthur | last post by:
How do i turn on java script on a villaon, callus and itel keypad mobile phone
1
by: nemocccc | last post by:
hello, everyone, I want to develop a software for my android phone for daily needs, any suggestions?
0
by: Hystou | last post by:
There are some requirements for setting up RAID: 1. The motherboard and BIOS support RAID configuration. 2. The motherboard has 2 or more available SATA protocol SSD/HDD slots (including MSATA, M.2...
0
Oralloy
by: Oralloy | last post by:
Hello folks, I am unable to find appropriate documentation on the type promotion of bit-fields when using the generalised comparison operator "<=>". The problem is that using the GNU compilers,...
0
jinu1996
by: jinu1996 | last post by:
In today's digital age, having a compelling online presence is paramount for businesses aiming to thrive in a competitive landscape. At the heart of this digital strategy lies an intricately woven...
0
by: Hystou | last post by:
Overview: Windows 11 and 10 have less user interface control over operating system update behaviour than previous versions of Windows. In Windows 11 and 10, there is no way to turn off the Windows...
0
tracyyun
by: tracyyun | last post by:
Dear forum friends, With the development of smart home technology, a variety of wireless communication protocols have appeared on the market, such as Zigbee, Z-Wave, Wi-Fi, Bluetooth, etc. Each...
0
agi2029
by: agi2029 | last post by:
Let's talk about the concept of autonomous AI software engineers and no-code agents. These AIs are designed to manage the entire lifecycle of a software development project—planning, coding, testing,...
0
isladogs
by: isladogs | last post by:
The next Access Europe User Group meeting will be on Wednesday 1 May 2024 starting at 18:00 UK time (6PM UTC+1) and finishing by 19:30 (7.30PM). In this session, we are pleased to welcome a new...

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.