Go4Expert

Go4Expert (http://www.go4expert.com/)
-   C (http://www.go4expert.com/forums/c/)
-   -   pointer string (http://www.go4expert.com/forums/pointer-string-t14583/)

cimon 17Oct2008 03:37

pointer string
 
Hello

If I take a string declaration as below:

char str[5]="Mike";
than the following statement does NOT produce error
str[start] ^= str[end];

If I take a string declaration as below:
char *str="Mike";
that the above mentioned statement str[start] ^= str[end]; DOES produce error.

So I want to know , that if my string declaration is as in second case (char *str="Mike";) than , how to write XOR statement so that it should not produce error.

Thank You

oogabooga 17Oct2008 04:04

Re: pointer string
 
The second case is a pointer to a string CONSTANT.
So you cannot (generally) change it.

cimon 18Oct2008 07:13

Re: pointer string
 
Thank you

micsom 20Oct2008 17:16

Re: pointer string
 
buddy i tried out ur code
char *str="MIKE";
str[0]^=str[4];
printf(" %s",str);

it gives no error... so i dont get it were is ur problem?

xpi0t0s 20Oct2008 22:33

Re: pointer string
 
micsom, you're probably using a different compiler, which one is it? Modifying a string constant should throw an error, since it's an operation you shouldn't perform.

XOR-ing something with zero DOESN'T modify it, so mabye the compiler's outsmarting the lot of us. Try this:
Code:

char *str1="Mike";
char *str2=str1;
xtr1[0]^=str[3];
printf("%s\n",str2);


back from retirement 15Nov2008 12:49

Re: pointer string
 
Quote:

Originally Posted by xpi0t0s
Try this:
Code:

char *str1="Mike";
char *str2=str1;
xtr1[0]^=str[3];
printf("%s\n",str2);


I have tried it in my pc....I modified it a bit....and it is running without error....

my code is...
Code:

#include<stdio.h>
#include<conio.h>

void main()
{
char *str1="Mike";
char *str2=str1;
str1[0]^=str1[4];
printf("%s\n",str2);
getch();
}

Is there anything wrong in my understanding??

back from retirement 15Nov2008 12:53

Re: pointer string
 
Actually i first tried with th given code for which the output was:
Code:

(ike
I don't know why....

But then when I changed str1[3] to str1[4], the problem got solved immediately....cna anyone explain me why??

xpi0t0s 15Nov2008 19:01

Re: pointer string
 
Well as I said you shouldn't modify string constants so str1[<anything>]^=<anthing> should throw an error - a compile time error if nothing else.
However if it works, to find out why 'M' xor 'e' produces '(' you'll need to look at an ASCII table and the binary values of those three characters.
'M' xor str1[4] = 'M', since str1[4]=0 (it's the terminating NULL). And as I said above, xor-ing anything with zero has no effect.

back from retirement 15Nov2008 20:34

Re: pointer string
 
Thanks......now I hope I understand the lot....thank you very very much xpi0tos


All times are GMT +5.5. The time now is 12:56.