2014-07-15 3 views
0

C++ Я получаю эту ошибкуНеобработанное исключение при

Unhandled exception at 0x00091e11 in JobTest.exe: 0xC0000005: Access violation writing location 0x0009573c. 

на первой строке этой функции

void myFunction(char str[]) { 

    str[0] = 'C';// here is a problem 
    printf(str); 
} 

myFunction("Hello World"); 

в Visual Studio 2010. Является ли это компилятор конкретных или я делаю очень плохую работу. Я также попытался сменить подпись функции char * str.

+0

Строковые литералы держать постоянные данные. Это не должно даже компилироваться с C++ 11. – chris

+1

Вы пытались написать постоянную строку только для чтения. Это неопределенное поведение. –

ответ

4

Строковые литералы не подлежат модификации. Вы пытаетесь изменить строковый литерал в функции myFunction.
Строковые литералы могут быть разделены и могут храниться в постоянной памяти (как сказал @Duplicator в своем комментарии). Любая попытка изменить строковый литерал вызывает неопределенное поведение.

Как @MooseBoys предложил, Вы можете это исправить, изменив его:

char msg[] = "Hello World"; 
myFunction(msg); 
+2

Вы можете исправить это, изменив его на: 'char msg [] =" Hello World "; myFunction (msg); ' – MooseBoys

+0

Спасибо, ребята ... вы, люди, всегда сумасшедшие всегда полезны ..... – abidkhan303

+0

@MooseBoys; Добавлено: :) – haccks

Смежные вопросы