Search code examples
carraysfunctionstring-literals

Modifying the array element in called function


I am trying to understanding the passing of string to a called function and modifying the elements of the array inside the called function.

void foo(char p[]){
  p[0] = 'a';
  printf("%s",p);
}
void main(){
  char p[] = "jkahsdkjs";
  p[0] = 'a';
  printf("%s",p);
  foo("fgfgf");
}

Above code returns an exception. I know that string in C is immutable, but would like to know what is there is difference between modifying in main and modifying the calling function. What happens in case of other date types?


Solution

  • I know that string in C is immutable

    That's not true. The correct version is: modifying string literals in C are undefined behaviors.

    In main(), you defined the string as:

    char p[] = "jkahsdkjs";
    

    which is a non-literal character array, so you can modify it. But what you passed to foo is "fgfgf", which is a string literal.

    Change it to:

    char str[] = "fgfgf";
    foo(str);
    

    would be fine.