запись в заданную пустую * область памяти в C - PullRequest
1 голос
/ 04 ноября 2010

У меня есть функция, которая принимает в качестве одного из своих параметров "void * buffer".В этой функции мне нужно записать в эту ячейку памяти.Однако, что-то вроде

*buffer = "Hello\0Hi\0";

не работает, потому что я не могу разыменовать указатель void *.Как поместить строку данных в эту область памяти?Обратите внимание, что мне нужно скопировать данные, не обязательно строку, поскольку они могут содержать нулевой символ.

Обновлено , чтобы отразить, что strcpy недостаточно

Ответы [ 2 ]

6 голосов
/ 04 ноября 2010

Если ваша строка «может содержать нулевой символ», то это на самом деле не строка C.

Если вам нужно скопировать определенное количество байтов из одной ячейки памяти в другую, независимо от содержимого, вы можете использовать memcpy. Вы можете получить размер строкового литерала, используя sizeof (в этот размер входит заключительный, неявный нулевой терминатор).

3 голосов
/ 04 ноября 2010

Вы не можете использовать оператор присваивания для копирования строки.Вам нужно будет использовать что-то вроде strcat (что, кстати, ОЧЕНЬ небезопасно).

Возможно, вы ищете

strcpy( (char *) buffer, "Hello");

Или, что еще лучше, используйте strncpy.Вам абсолютно необходимо указать размер буфера и убедиться, что он не переполнен, иначе у вас в приложении огромная дыра в безопасности, не говоря уже об источнике бесчисленных трудно отслеживаемых ошибок.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...