2017-05-11 31 views
-1

我有以下代碼。爲什麼訪問衝突寫在內存位置

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 } 

當我編譯視覺工作室行9導致問題。它顯示

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

任何人都可以解釋爲什麼會出現此錯誤,以及如何解決這個問題? 在此先感謝。

+1

'焦炭inputString [] = 「Nahid」;'不要試圖改變字符串字面。 – BLUEPIXY

回答

2

字符串文字不得修改。任何修改字符串文字的嘗試都會導致未定義的行爲。

從C標準(6.4.5字符串文本)

7這些陣列是否是不同的條件是它們的 元素具有適當的值是不確定的。如果程序試圖修改這樣一個數組, 的行爲是未定義的。

而是使用字符數組。例如

char inputString[] = "Nahid";