Прежде всего вы должны быть осторожны при сохранении адреса в переменную, которую вы хотите использовать позже.Вы должны убедиться, что адрес, удерживаемый указателем, остается действительным, когда вы читаете из него:
int main()
{
char str[] = "Hello I am computer"; // "Hello I am computer" is stored on the stack
AddStringToQueue(str[0]);
}
// str could be overwritten by another function who allocates local variables
Как вы сказали в комментарии, вы должны использовать void* malloc(sizeof("Hello I am computer"))
, который возвращает начальный указатель вашей выделенной памяти,
Другое дело, почему вы хотите хранить строку как токены?Не проще ли сохранить всю строку ("Hello I am computer"
) и использовать первый символ в качестве начального адреса строки?Если вам нужны токены, вы можете вызвать strtok () после того, как прочитали очередь.
Позвольте мне привести пример:
#define QUEUE_MAX 10
int QueuePos = 0;
char* Queue[QUEUE_MAX];
memset(Queue, NULL, sizeof(Queue));
// call AddStringToQueue("Hello I am computer"); anywhere
void AddStringToQueue(char* string)
{
char* ptr = (char*)malloc(sizeof(string));
memcpy(ptr, string, sizeof(string));
Queue[QueuePos++] = ptr;
if (QueuePos == QUEUE_MAX) QueuePos = 0; // overwrites Queue if max. is reached
}
Я не уверен, что вы имеете в виду это.
Надеюсь, это поможет.
PS: Я не скомпилировал это, поэтому я не уверен, что это работает, это просто пример.