Проблема заключается в том, что массивы нельзя назначать в C. Строковые константы, такие как "gray"
, являются константами символьного массива: в этом случае тип равен char[5]
(4 + 1 для завершающего нуля).
Если вы знаете, что целевой массив достаточно велик, чтобы вместить желаемую строку, вы можете использовать strcpy
, чтобы скопировать строку следующим образом:
// Make sure you know that c[i] is big enough!
strcpy(c[i], "gray");
Лучшей идеей являетсяиспользуйте более безопасную функцию, такую как strlcpy
(для систем на базе BSD и Mac OS X) или strcpy_s
(для Windows):
strlcpy(c[i], "gray", 10); // 10 is the size of c[i]
Однако,Эти функции зависят от платформы и не всегда переносимы.Вы также можете свернуть свою собственную реализацию, если скорость не является проблемой:
size_t strlcpy(char *dst, const char *src, size_t size)
{
size_t len = 0;
while(size > 1 && *src)
{
*dst++ = *src++;
size--;
len++;
}
if(size > 0)
*dst = 0;
return len + strlen(src);
}
Делайте Не используйте strncpy
, так как потенциально может оставить вас ненулевымстрока