(1) для совместного использования памяти, которую вы хотите сделать str = orig
, поскольку str
уже является типом указателя.
(2) orig
определяется как строковый литерал, константа - поэтому вы не можете изменить значение "Hey you guys."
, даже если при обращении к нему через str
, это приведет к ошибке времени выполнения.
РЕДАКТИРОВАТЬ: Проблема № 3: В цикле while вы сначала увеличиваете указатель, а только потом проверяете, является ли он 'y', иизменить.При этом - вы пропустите первый элемент ."yasdf"
станет "yasdf"
, а не "@asdf"
, как вы ожидаете.[в общем, я думаю, что вы ожидаете ...]
Чтобы добиться того, чего вы хотите, вы можете следовать этому: [используя strcpy и буфер, чтобы избежать записи в постоянную память]
#include <stdio.h>
#include <string.h>
int main ()
{
char *orig = "Hey you guys.";
char buff[14]; //the length of orig + 1 byte for '\0'
char *str = buff; //since str and buff are already pointers
strcpy(str,orig);
while(*str) {
if (*str == 'y')
*str = '@';
str++;
}
puts(buff);
return 0;
}