0

Hi i have below program.

char *x="abc";
*x=48;
printf("%c",*x);

This gives me output a, but I expected output as 0.

EDIT Can you suggest what I can do in order to store data during runtime in

char *x;
Abhinandan
  • 159
  • 1
  • 14

2 Answers2

4

You can't: the behaviour on attempting to is undefined. The string "abc" is a read-only literal (formally its type is const char[4]).

If you write

char x[] = "abc";

Then you are allowed to modify the string.

Bathsheba
  • 231,907
  • 34
  • 361
  • 483
1

You cannot (even try to) to modify a string literal. It causes undefined behavior.

You need to make use of a write-allowed memory. There are two ways.

  • Allocate memory to pointer x (i.e, store the returned pointer via memory allocator methods to x), then this will be writable, and copy the string literal using strcpy().

      char * x = NULL;
      if (x = malloc(DEF_SIZ)) {strcpy(x, "abc");}
    
    • Or, not strictly standard conforming, but shorter, strdup().

      char *x = strdup("abc");
      
  • use an array x and initialize it with the string literal.

    char x[] = "abc";
    

In all above cases, x (or rather, the memory location pointed by x) is modifiable.

Sourav Ghosh
  • 133,132
  • 16
  • 183
  • 261