使用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
//...
}
这个错误究竟意味着什么?是因为我没有初始化阵列吗?如果我将其声明为静态,它会起作用吗?
答案 0 :(得分:2)
strtok
返回cmd
的位,因此您不为其返回值分配存储空间。您只需要令牌为char*
:
char* token;
答案 1 :(得分:2)
您应该声明
char token[BUFFER_SIZE]
作为
char *token
因为它在为cmd[BUFFER_SIZE]
分配的内存中分配了一个地址
令牌地址无法重新定位(以你宣布的方式)。
答案 2 :(得分:0)
token
是数组的名称。它是一个常数,不能留下价值。我认为你需要char *
。