0

嗨,我在 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 的原因。
需要帮助。
谢谢

4

2 回答 2

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

您不能为 C 中的数组赋值。

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

也在:

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

数组对象在activeModule函数结束时被销毁。在函数返回后访问它是未定义的行为。

于 2012-08-24T17:02:39.077 回答
1

除了ouah所说的。

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

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

然后,删除activeModulefromgetActiveModuleType的声明,因为它已经声明为参数。

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

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

并且,在您的main函数中,替换getActiveModuleBuff = getActiveModuleType();getActiveModuleType(getActiveModuleBuff);.

于 2012-08-24T18:11:15.390 回答