当前位置:  开发笔记 > 程序员 > 正文

在C中解析字符串时出错"左操作数必须是l值"

如何解决《在C中解析字符串时出错"左操作数必须是l值"》经验,为你挑选了1个好方法。

我需要在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个字符.



1> Eddie..:

假设您将theString定义为数组,请尝试将其定义为指针.将char变量声明为数组时,以后不能更改其地址.

我假设你有一个类似的声明

char theString[100];

最简单的解决方案是单独保留该声明,并添加另一个:

char *str = theString;

然后使用str您当前使用的所有地方theString.

推荐阅读
可爱的天使keven_464
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有