0

Is there a difference between:

char string = "name";
const char* point = string;

vs

const char string[] = "name";

Will you please explain the difference too?

user1334858
  • 1,763
  • 5
  • 27
  • 39

2 Answers2

5

Yes.

The first simply points to a read only section of memory, the declaration really should be:

const char* string = "name";

The second creates an array long enough to hold the string "name" (so, four characters plus one for the null terminator) and copies the string inside the allocated space.

Nik Bougalis
  • 10,382
  • 1
  • 20
  • 37
Collin
  • 11,437
  • 2
  • 41
  • 58
0
#include <stdio.h>

int main(int argc, const char** argv)
{
    const char *a1 = "hello";
    const char a2[] = "hello";
    char* b1;
    char* b2;

    b2 = (char*) a2;
    *b2 = 'c';
    puts(b2);

    b1 = (char*)a1;
    *b1 = 'c';
    puts(b1);


    return 0;
}

b2 will display 'cello' properly. b1 will cause a segmentation fault.

This is due to b1 is stored in text segment of the code, whereas b2 is stored in data segment.

i hope i didnt mess it up...

also, compiler can do magic to make this invalid by recognizing that something is declared on text segment, but is accessed in code, so C sometimes catches on, and changes declaration to data segment

Dmitry
  • 4,752
  • 4
  • 35
  • 48