@ ralu правильно, что вы должны использовать структуру. Но вы также должны быть очень осторожны при копировании строк. В C нет строкового объекта первого класса, как в C ++, Java, Python, и, в общем, во всем остальном. :)
В C символьные указатели (char*
) часто используются в качестве строк, но на самом деле они являются просто указателями на нулевые концевые массивы байтов в памяти где-либо. Копирование указателя на символ не совпадает с копированием основного массива символов. Для этого вам необходимо выделить память для символов копии. Эта память может находиться в стеке (локальный массив), в куче (созданной с помощью malloc) или в каком-либо другом буфере.
Вам нужно измерить длину строки, прежде чем что-либо делать, чтобы убедиться, что целевой буфер может ее содержать. Не забудьте добавить один к длине, чтобы было место для завершающего нуля.
Также обратите внимание, что стандартные библиотечные функции (strlen, strcpy, strncpy, strcat, snprintf, strdup и т. Д.) Немного несовместимы друг с другом в отношении завершающего нуля. Например, strlen возвращает количество символов, исключая завершающий ноль, поэтому буферы должны быть на один байт больше, чем те, которые он возвращает для хранения вещей. Кроме того, strncpy не гарантирует нулевое завершение, в то время как snprintf делает. Неправильное использование этих функций и строк C в целом является причиной значительного числа нарушений безопасности (не говоря уже об ошибках) в современных компьютерных системах.
Если вы не создаете или не используете надежную библиотеку, манипуляции со строками и списками в C утомительны и подвержены ошибкам. Вы можете понять, почему были изобретены C ++ и все эти другие языки.