Solved

Copy of a string

Posted on 2011-03-05
5
276 Views
Last Modified: 2012-05-11
Please tell me how I can make a copy of a given string, at run time.

If my function takes char *str as a parameter, then I want make a local copy of str within the function.

Thanks!
0
Comment
Question by:dshrenik
[X]
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 Comments
 
LVL 16

Expert Comment

by:Peter Kwan
ID: 35043582
0
 

Author Comment

by:dshrenik
ID: 35043593
I don't want to use library functions.

Will it work if I find the length of the string, then dynamically allocate a char array and assign its value to the original?

If possible, please provide some sample code.

Thanks!
0
 
LVL 16

Accepted Solution

by:
Peter Kwan earned 167 total points
ID: 35043670
You can do it this way (pseudo-code only):
char *new_str;
int i = 0;
new_str = (char*) malloc(sizeof(char));
new_str[i] = orig_str[i];
while (orig_str[i] != NULL) {
     new_str = (char*)realloc(new_str, (i+2)*sizeof(char));
     new_str[i] = orig_str[i];
     i++;
} 
new_str[i]=0;

Open in new window

0
 
LVL 11

Assisted Solution

by:DeepuAbrahamK
DeepuAbrahamK earned 167 total points
ID: 35044187
another way if implementing this . here is the snippet
char* strcpy_new(char* dest,const char* source)
{
	if ((dest == NULL)|| (source == NULL))
		return NULL;
        //if you know the length then you could check it here..
	int i = 0;
	while(source[i]!='\0')
	{
		dest[i] = source[i];
		i++;
	}
	if(dest[i] != '\0')
		dest[i] = '\0';

	return dest;
}

Open in new window

0
 
LVL 1

Assisted Solution

by:hogwell
hogwell earned 166 total points
ID: 35047085
// A simpler, more efficient version that creates a copy of the input string on the heap.
char* copy_a_string(const char *str)
{
    const char *str1=str;
    size_t len;
    char *copy_of_str;
    char *str2;
    while (*str1) ++str1;
    len = str1 - str;
    copy_of_str = (char*) malloc((len+1)*sizeof(char)); // Or use "copy_of_str = new char[len+1];" in C++
    for (str1=str,str2=copy_of_str; *str1; )
      *str2++ = *str1++;
    *str2 = '\0';
    return copy_of_string;
}
0

Featured Post

Independent Software Vendors: We Want Your Opinion

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

Question has a verified solution.

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

Article by: SunnyDark
This article's goal is to present you with an easy to use XML wrapper for C++ and also present some interesting techniques that you might use with MS C++. The reason I built this class is to ease the pain of using XML files with C++, since there is…
Windows programmers of the C/C++ variety, how many of you realise that since Window 9x Microsoft has been lying to you about what constitutes Unicode (http://en.wikipedia.org/wiki/Unicode)? They will have you believe that Unicode requires you to use…
The goal of this video is to provide viewers with basic examples to understand recursion in the C programming language.
The goal of the video will be to teach the user the concept of local variables and scope. An example of a locally defined variable will be given as well as an explanation of what scope is in C++. The local variable and concept of scope will be relat…

729 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