Почему запись нарушения прав доступа в ячейку памяти

У меня есть следующий код.

1 #include <stdio.h>
2 #include <string.h>
3 
4 void encryptString2(char *encryptedString)
5 {
6   
7   while (*encryptedString)
8   {   
9       *encryptedString = *encryptedString ^ 31;
10      printf("Encrypted Character : %c\n", *encryptedString);
11      encryptedString++;  
12  }
13}
14
15 int main(int argc, char* argv[])
16 {
17  char *inputString = "Nahid";
18  printf("Input string : %s\n", inputString);
19  encryptString2(inputString);
20  printf("Input String : %s\n", inputString);
21 }

когда я компилирую в Visual Studio, строка 9 вызывает проблему. Это показывает

Unhandled exception at 0x000B1AA4 in Page_182.exe: 0xC0000005: Access violation writing location 0x000B5C40.

Кто-нибудь может объяснить, почему возникает эта ошибка и как решить проблему? Заранее спасибо.


person nahid    schedule 11.05.2017    source источник
comment
char inputString[] = "Nahid"; Не пытайтесь изменить строковый литерал.   -  person BLUEPIXY    schedule 11.05.2017


Ответы (1)


Строковые литералы изменять нельзя. Любая попытка изменить строковый литерал приводит к неопределенному поведению.

Из стандарта C (строковые литералы 6.4.5)

7 Не указано, являются ли эти массивы различными при условии, что их элементы имеют соответствующие значения. Если программа пытается изменить такой массив, поведение не определено.

Вместо этого используйте массив символов. Например

char inputString[] = "Nahid";
person Vlad from Moscow    schedule 11.05.2017