Уже есть несколько ответов о том, как делать то, что вы хотите сделать, но я хотел бы объяснить, что на самом деле под этими pchar++
в вашем коде и почему это зло.
C-style литье дает гибкость, но позволяет вам выстрелить себе в ногу.Вы выделили char c
в стеке (это означает, что у вас зарезервировано точное количество памяти, и оно равно sizeof(char)
, что составляет ровно 1
байт).
Затем вы берете адрес памяти вашей переменной (это нормально), поэтому у вас есть переменная char
и указатель на память, где эта char
расположен.Но ваш следующий шаг полностью злой, , потому что вы (при выполнении *(pchar + 1) = 0
) фактически портите стек.
Как я уже говорил ранее, компилятор зарезервировал ровно один байт для вашего символапамяти, но то, что вы делаете, означает явный переход к следующему байту в этой памяти (который может даже принадлежать стеку другой программы) и переписывание его с вашими собственными значениями.
Это поведение также может быть описано на следующем примере:
Думаю, что вам нужно изменить содержимое какого-то конкретного файла(a.file
) на вашем жестком диске.Как вы думаете, можно ли переписать содержимое файлов, которые последовательно следуют a.file
, например, увеличить размер этого a.file
?