为什么访问违规写入内存位置

时间:2017-05-11 13:46:04

标签: c++ string visual-c++ c-strings

我有以下代码。

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.

有人可以解释为什么会出现这种错误以及如何解决问题? 提前谢谢。

1 个答案:

答案 0 :(得分:2)

不能修改字符串文字。任何修改字符串文字的尝试都会导致未定义的行为。

来自C标准(6.4.5字符串文字)

  

7未指明这些阵列是否与它们不同   元素具有适当的值。如果程序试图   修改这样的数组,行为是未定义的。

而是使用字符数组。例如

char inputString[] = "Nahid";