how to copy argv[1]?

Aug 29, 2010 at 8:16am
1
2
3
4
5
6
7
8
9
10
11
12
13
14
int main(int argc, char *argv[]) 
{ 
   char * str1,*str2,*str3; 
    str1=argv[1];
    str2=argv[1];
   
     .........
     strcat(str1,"hello");
     cout<<str1;
     strcat(str2,"well");
     cout<<str2;

........

example d:>main test

str1 contains"testhello"
str2 contains"testhellowell"

but I only want str2 contains"testwell" not "testhellowell"

Aug 29, 2010 at 8:38am
This wouldn't work because both str1 and str2 are pointers to the same location in memory and changing one affects the other one.

You could write something like this:

1
2
3
4
5
6
7
8
9
10
11
12
13
int main(int argc, char *argv[])
{
    char str1[40];
    char str2[40];

    strcpy(str1, argv[1]);
    strcpy(str2, argv[1]);

    strcat(str1, "hello");
    printf("str1: %s\n", str1);
    strcat(str2, "well");
    printf("str2: %s\n", str2);
}

Aug 30, 2010 at 1:19pm
Use std::string.

1
2
3
4
5
6
7
8
9
10
#include <iostream>
#include <string>

int main( int argc, char* argv[] )
{
    // assert( argc > 1 );
    std::string arg1 = argv[ 1 ] + std::string( "hello" );
    std::string arg2 = argv[ 1 ] + std::string( "well" );
    std::cout << arg1 << std::endl << arg2 << std::endl;
}
Last edited on Aug 30, 2010 at 1:20pm
Topic archived. No new replies allowed.