为啥在内存位置写入访问冲突[重复]

Posted

技术标签:

【中文标题】为啥在内存位置写入访问冲突[重复]【英文标题】:Why Access violation writing at memory location [duplicate]为什么在内存位置写入访问冲突[重复] 【发布时间】:2017-05-11 13:46:03 【问题描述】:

我有以下代码。

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.

谁能解释为什么会出现这个错误以及如何解决这个问题? 提前致谢。

【问题讨论】:

char inputString[] = "Nahid"; 不要尝试更改字符串文字。 【参考方案1】:

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

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

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

改为使用字符数组。例如

char inputString[] = "Nahid";

【讨论】:

以上是关于为啥在内存位置写入访问冲突[重复]的主要内容,如果未能解决你的问题,请参考以下文章

为啥 *(int*)0=0 不会导致访问冲突?

访问分配的内存时出现访问冲突错误[重复]

在二维数组上使用 delete[] 时访问冲突 [重复]

c ++访问冲突写入位置0x00000000

写入位置0x00460000时发生访问冲突,这是啥原因?

(ntdll.dll)处引发的异常: 0xC0000005: 写入位置 0x00007FF6010E2278 时发生访问冲突 怎么办?