creating string literal out of array of chars
up vote
0
down vote
favorite
I want to merge 2 string literals to one
this is my function
char* merge(const char* a, const char* b)
{
char buffer[256]; // <- danger, only storage for 256 characters.
strncpy(buffer, a, sizeof(buffer));
strncat(buffer, " ", sizeof(buffer));
strncat(buffer, b, sizeof(buffer));
strncat(buffer, "", sizeof(buffer));
char* x = buffer;
cout <<"ll "<<x<<endl;
for(int i=0;i<3;i++)
{
buffer[i]='p';
}
cout <<"ll "<<x<<endl;
return x;
}
Let's assume a="Michael" and b = John "
output (couts) is:
ll Michael John
ll ppphael John
I made some research and it is like that because x points to array allocated at stack. I want x to be pointing to string literal allocated in read-only section, so my output would be:
ll Michael John
ll Michael John
My question is how to make string literal out of array of chars buffer[256]={M,i,c,h,a,e,l, ,J,o,h,n,,0,0,0,0,0,0...,0}
(Don't ask why I'm doing such pointless job, it's for my studies and we are not allowed to use string type nor stl)
arrays string string-literals
|
show 1 more comment
up vote
0
down vote
favorite
I want to merge 2 string literals to one
this is my function
char* merge(const char* a, const char* b)
{
char buffer[256]; // <- danger, only storage for 256 characters.
strncpy(buffer, a, sizeof(buffer));
strncat(buffer, " ", sizeof(buffer));
strncat(buffer, b, sizeof(buffer));
strncat(buffer, "", sizeof(buffer));
char* x = buffer;
cout <<"ll "<<x<<endl;
for(int i=0;i<3;i++)
{
buffer[i]='p';
}
cout <<"ll "<<x<<endl;
return x;
}
Let's assume a="Michael" and b = John "
output (couts) is:
ll Michael John
ll ppphael John
I made some research and it is like that because x points to array allocated at stack. I want x to be pointing to string literal allocated in read-only section, so my output would be:
ll Michael John
ll Michael John
My question is how to make string literal out of array of chars buffer[256]={M,i,c,h,a,e,l, ,J,o,h,n,,0,0,0,0,0,0...,0}
(Don't ask why I'm doing such pointless job, it's for my studies and we are not allowed to use string type nor stl)
arrays string string-literals
String literals are part of the source code. They're not something you manipulate at runtime.
– Jonathon Reinhart
Nov 11 at 14:48
This is not C. Please don't spam tags.
– Passer By
Nov 11 at 14:49
This looks very much like C. In modern C++ this is not how this would be written.
– Jesper Juhl
Nov 11 at 14:50
1
In C++ a "literal string" is really a constant array of characters with a null-terminator. In C the arrays aren't constant, but only read-only (i.e. you still should consider them constant).
– Some programmer dude
Nov 11 at 14:50
There are also quite a few problems with the code you show, including returning pointers to local variables, and that the string inbuffer
could be missing a terminator.
– Some programmer dude
Nov 11 at 14:52
|
show 1 more comment
up vote
0
down vote
favorite
up vote
0
down vote
favorite
I want to merge 2 string literals to one
this is my function
char* merge(const char* a, const char* b)
{
char buffer[256]; // <- danger, only storage for 256 characters.
strncpy(buffer, a, sizeof(buffer));
strncat(buffer, " ", sizeof(buffer));
strncat(buffer, b, sizeof(buffer));
strncat(buffer, "", sizeof(buffer));
char* x = buffer;
cout <<"ll "<<x<<endl;
for(int i=0;i<3;i++)
{
buffer[i]='p';
}
cout <<"ll "<<x<<endl;
return x;
}
Let's assume a="Michael" and b = John "
output (couts) is:
ll Michael John
ll ppphael John
I made some research and it is like that because x points to array allocated at stack. I want x to be pointing to string literal allocated in read-only section, so my output would be:
ll Michael John
ll Michael John
My question is how to make string literal out of array of chars buffer[256]={M,i,c,h,a,e,l, ,J,o,h,n,,0,0,0,0,0,0...,0}
(Don't ask why I'm doing such pointless job, it's for my studies and we are not allowed to use string type nor stl)
arrays string string-literals
I want to merge 2 string literals to one
this is my function
char* merge(const char* a, const char* b)
{
char buffer[256]; // <- danger, only storage for 256 characters.
strncpy(buffer, a, sizeof(buffer));
strncat(buffer, " ", sizeof(buffer));
strncat(buffer, b, sizeof(buffer));
strncat(buffer, "", sizeof(buffer));
char* x = buffer;
cout <<"ll "<<x<<endl;
for(int i=0;i<3;i++)
{
buffer[i]='p';
}
cout <<"ll "<<x<<endl;
return x;
}
Let's assume a="Michael" and b = John "
output (couts) is:
ll Michael John
ll ppphael John
I made some research and it is like that because x points to array allocated at stack. I want x to be pointing to string literal allocated in read-only section, so my output would be:
ll Michael John
ll Michael John
My question is how to make string literal out of array of chars buffer[256]={M,i,c,h,a,e,l, ,J,o,h,n,,0,0,0,0,0,0...,0}
(Don't ask why I'm doing such pointless job, it's for my studies and we are not allowed to use string type nor stl)
arrays string string-literals
arrays string string-literals
edited Nov 11 at 14:51
asked Nov 11 at 14:47
pooo mn
13
13
String literals are part of the source code. They're not something you manipulate at runtime.
– Jonathon Reinhart
Nov 11 at 14:48
This is not C. Please don't spam tags.
– Passer By
Nov 11 at 14:49
This looks very much like C. In modern C++ this is not how this would be written.
– Jesper Juhl
Nov 11 at 14:50
1
In C++ a "literal string" is really a constant array of characters with a null-terminator. In C the arrays aren't constant, but only read-only (i.e. you still should consider them constant).
– Some programmer dude
Nov 11 at 14:50
There are also quite a few problems with the code you show, including returning pointers to local variables, and that the string inbuffer
could be missing a terminator.
– Some programmer dude
Nov 11 at 14:52
|
show 1 more comment
String literals are part of the source code. They're not something you manipulate at runtime.
– Jonathon Reinhart
Nov 11 at 14:48
This is not C. Please don't spam tags.
– Passer By
Nov 11 at 14:49
This looks very much like C. In modern C++ this is not how this would be written.
– Jesper Juhl
Nov 11 at 14:50
1
In C++ a "literal string" is really a constant array of characters with a null-terminator. In C the arrays aren't constant, but only read-only (i.e. you still should consider them constant).
– Some programmer dude
Nov 11 at 14:50
There are also quite a few problems with the code you show, including returning pointers to local variables, and that the string inbuffer
could be missing a terminator.
– Some programmer dude
Nov 11 at 14:52
String literals are part of the source code. They're not something you manipulate at runtime.
– Jonathon Reinhart
Nov 11 at 14:48
String literals are part of the source code. They're not something you manipulate at runtime.
– Jonathon Reinhart
Nov 11 at 14:48
This is not C. Please don't spam tags.
– Passer By
Nov 11 at 14:49
This is not C. Please don't spam tags.
– Passer By
Nov 11 at 14:49
This looks very much like C. In modern C++ this is not how this would be written.
– Jesper Juhl
Nov 11 at 14:50
This looks very much like C. In modern C++ this is not how this would be written.
– Jesper Juhl
Nov 11 at 14:50
1
1
In C++ a "literal string" is really a constant array of characters with a null-terminator. In C the arrays aren't constant, but only read-only (i.e. you still should consider them constant).
– Some programmer dude
Nov 11 at 14:50
In C++ a "literal string" is really a constant array of characters with a null-terminator. In C the arrays aren't constant, but only read-only (i.e. you still should consider them constant).
– Some programmer dude
Nov 11 at 14:50
There are also quite a few problems with the code you show, including returning pointers to local variables, and that the string in
buffer
could be missing a terminator.– Some programmer dude
Nov 11 at 14:52
There are also quite a few problems with the code you show, including returning pointers to local variables, and that the string in
buffer
could be missing a terminator.– Some programmer dude
Nov 11 at 14:52
|
show 1 more comment
active
oldest
votes
active
oldest
votes
active
oldest
votes
active
oldest
votes
active
oldest
votes
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Some of your past answers have not been well-received, and you're in danger of being blocked from answering.
Please pay close attention to the following guidance:
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53249840%2fcreating-string-literal-out-of-array-of-chars%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
String literals are part of the source code. They're not something you manipulate at runtime.
– Jonathon Reinhart
Nov 11 at 14:48
This is not C. Please don't spam tags.
– Passer By
Nov 11 at 14:49
This looks very much like C. In modern C++ this is not how this would be written.
– Jesper Juhl
Nov 11 at 14:50
1
In C++ a "literal string" is really a constant array of characters with a null-terminator. In C the arrays aren't constant, but only read-only (i.e. you still should consider them constant).
– Some programmer dude
Nov 11 at 14:50
There are also quite a few problems with the code you show, including returning pointers to local variables, and that the string in
buffer
could be missing a terminator.– Some programmer dude
Nov 11 at 14:52