您好我在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的原因
需要帮助。
谢谢
答案 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);
。