错误C2106:'=':左操作数必须是VS2008上c的l值

时间:2012-08-24 17:01:19

标签: c visual-studio-2008 compiler-errors

您好我在Visual Studio 2008上尝试此代码时无法找到编译错误的原因。我试图通过函数查看char *返回值的示例。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
static char* getActiveModuleType(void);
void main()
{
char getActiveModuleBuff[128];
//error C2106: '=' : left operand must be l-value
getActiveModuleBuff = getActiveModuleType();
printf("Active module in well formatted (2): %s\n",getActiveModuleBuff);

    exit(0);
 }
 char* getActiveModuleType(void)
 {
char activeModule[128];
int tempBuffLen=0;
int nbActivemodule = 0;
char moduleA        = 1;
char moduleB        = 1;
char moduleC        = 0;
char moduleD        = 1;
int i = 0;
if(moduleA==1) {activeModule[i] ='A'; activeModule[i+1]=','; i= i+2;}
if(moduleB==1) {activeModule[i] ='B'; activeModule[i+1]=','; i= i+2;}
if(moduleC==1) {activeModule[i] ='C'; activeModule[i+1]=','; i= i+2;}
if(moduleD==1) {activeModule[i] ='D'; activeModule[i+1]=','; i= i+2;}

printf(" Active module in : %s\n",activeModule);
//let get get the last ',' value trucated
tempBuffLen = strlen(activeModule);
nbActivemodule = tempBuffLen/2;
if((tempBuffLen == 0) && (nbActivemodule ==0)){
        memcpy(activeModule,"NoActiveModule",14);
        return activeModule;
}
if(activeModule[tempBuffLen-1]==',')
    activeModule[tempBuffLen-1] = '\0';
printf(" Active module in well formatted : %s\n",activeModule);

return activeModule;
}

我无法找到此代码中出现此错误C2106的原因 需要帮助。
谢谢

2 个答案:

答案 0 :(得分:2)

char getActiveModuleBuff[128];
getActiveModuleBuff = getActiveModuleType();

您无法在C中为数组指定值。

使用memcpy复制数组或strcpy / strncpy复制字符串。

同样在:

 char* getActiveModuleType(void)
 {
     char activeModule[128];
     /* ... */
     return activeModule;
 }

在函数末尾销毁activeModule数组对象。在函数返回后访问它是未定义的行为。

答案 1 :(得分:1)

除了ouah所说的。

不要返回数组。相反,将函数写入作为参数传递给它的数组,然后返回结果代码。

getActiveModuleType函数的原型更改为void getActiveModuleType(char *activeModule)。这将使该函数将您的数组作为参数并且不返回任何内容。

然后,从activeModule删除getActiveModuleType的声明,因为它已经被声明为参数。

memcpy(activeModule,"NoActiveModule",14);之后,将return activeModule;替换为return;,因为您的函数不返回任何内容(void)。这将使您的函数在失败时退出。

getActiveModuleType的末尾,删除return activeModule;行,因为该函数不返回任何内容。

并且,在main函数中,将getActiveModuleBuff = getActiveModuleType();替换为getActiveModuleType(getActiveModuleBuff);