Проблема здесь в том, что вы пытаетесь использовать C-строки в качестве массивов символов, что, безусловно, разрешено, но это другое поведение, чем использование их в качестве указателей на строк с нулевым символом в конце строк , Выполнение hello[0]
оценивает первый символ строки, который обычно является 8-битным целым числом. char
- это значение, оно не соответствует адресу памяти.
Правильное утверждение, которое вы хотите, это
strcpy(str, hello);
Для справки: если вы хотите получить строку, начинающуюся в некоторой точке вашей строки, вы должны сделать
strcpy(str, hello + 1);
При выполнении сложения с указателем вычисляется указатель, который на несколько адресов пересылается в память.