C:赋值无效:左值仅使用strtok进行读取

时间:2011-11-28 15:41:33

标签: c strtok

使用strtok时遇到问题。我希望令牌具有保留的大小,因此其内容不会破坏其他数据(我的内存很小,因为我在MCU上工作,而不是PC)。然后我决定将ir声明为具有声明大小的数组。

但后来我有这个错误:作业无效:左值是只读

#DEFINE BUFFER_SIZE 128
static int8 buffer[BUFFER_SIZE]; // Declared as global

void myFunction(){
   char separador[3],  token[BUFFER_SIZE], cmd[BUFFER_SIZE];
   strcpy(cmd, buffer); // buffer is a global variable declared ad
   strcpy(separador, ",;"); 
   token = strtok(cmd, separador); // <----- ERROR
   //...
}

这个错误究竟意味着什么?是因为我没有初始化阵列吗?如果我将其声明为静态,它会起作用吗?

3 个答案:

答案 0 :(得分:2)

strtok返回cmd的位,因此您不为其返回值分配存储空间。您只需要令牌为char*

char* token;

答案 1 :(得分:2)

您应该声明

char token[BUFFER_SIZE] 

作为

char *token

因为它在为cmd[BUFFER_SIZE]分配的内存中分配了一个地址 令牌地址无法重新定位(以你宣布的方式)。

答案 2 :(得分:0)

token是数组的名称。它是一个常数,不能留下价值。我认为你需要char *