Когда вы пишете оператор
*src = "anotherstring";
, компилятор видит постоянную строку "abcdefghijklmnop"
как массив.Представьте, что вместо этого вы написали следующий код:
char otherstring[14] = "anotherstring";
...
*src = otherstring;
Теперь немного яснее, что происходит.Левая сторона, *src
, относится к char
(поскольку src
имеет тип указатель на char
), тогда как правая сторона, otherstring
, относится к указателю.*
Это не строго запрещено, поскольку вы можете сохранить адрес, на который указывает указатель.Тем не менее, в этом случае обычно используется явное приведение (что не так часто встречается).Компилятор выдает красный флаг, потому что ваш код, вероятно, не выполняет то, о чем вы думаете.
Мне кажется, что вы пытаетесь назначить строку.Строки в C не являются типами данных, как в C ++, и вместо этого реализуются с массивами char
.Вы не можете напрямую присвоить значения строке, как вы пытаетесь сделать.Вместо этого вам нужно использовать такие функции, как strncpy
и друзья из <string.h>
и использовать char
массивы вместо char
указателей.Если вы просто хотите, чтобы указатель указывал на другую статическую строку, тогда отбросьте *
.