Why does it say \"Memory access violation\"?
char* str = \"HelloGuys\";
int len = strlen(str);
for (int i=0; i<(len/2); ++i){
char t = str[l
The behaviour is undefined if a program attempts to modify any portion of a string literal (most compiler chose to raise a "Memory access violation" error). The most important thing is to identify when you are trying to modify string literals and when you are not.
This is ok:
char str[] = "string literal";
str[0] = 'S';
You have made a copy of the string literal. You are not modifying the string literal, but the array str.
This is not ok:
char *str = "string literal";
str[0] = 'S';
You never made a copy of the string; the pointer is pointing to the string literal itself. You are attempting to modify the string literal.
To fix this, use an array instead of a pointer to read-only memory:
char str[] = "HelloGuys"; // change this line
int len = strlen(str);
for (int i=0; i<(len/2); ++i){
char t = str[len-i-1];
str[len-i-1] = str[i];
str[i] = t;
}
As Prasoon already said, string literals are not modifiable.
If you need a modifiable array of chars have it like this:
char str[] = "HelloGuys";
String literals are stored in read only section of memory. Any attempt to modify the contents of a string literal invokes Undefined Behaviour (segmentation fault on most implementations).
Use an array of characters rather
char str[] = "HelloGuys";