我需要在ANSI C中以"blah.bleh.bloh"格式的字符串中提取信息.通常我会使用strok()来完成此操作,但是因为我通过strtok获取此字符串,并且strtok不是线程安全的,我不能使用这个选项.
我编写了一个手动解析字符串的函数.这是一个snippit:
for(charIndex=0; charIndex < (char)strlen(theString); charIndex++) { if(theString[charIndex] == '.') { theString[charIndex] = '\0'; osi_string_copy_n(Info[currentInfoIndex], 1024, theString, charIndex + 1 ); currentInfoIndex++; theString = &theString[charIndex + 1]; } charIndex++; }
如你所见,我试图找到第一次出现'.' 并记下角色的索引.然后我转换'.' 到一个null char并将第一个字符串复制到一个数组.
然后我想将指针更改为刚刚找到分隔符后的开始,基本上给了我一个新的更短的字符串.
不幸的是我收到错误:
theString = &theString[charIndex + 1];
错误是:
error C2106: '=' : left operand must be l-value
为什么我不允许像这样移动指针?我的方法有缺陷吗?也许有人有更好的想法来解析这个字符串.
编辑:在回应评论时,theString的声明是:
char theString[1024] = {0};
此外,我保证theString永远不会超过1024个字符.
假设您将theString定义为数组,请尝试将其定义为指针.将char变量声明为数组时,以后不能更改其地址.
我假设你有一个类似的声明
char theString[100];
最简单的解决方案是单独保留该声明,并添加另一个:
char *str = theString;
然后使用str
您当前使用的所有地方theString
.