return从指针生成整数而不进行强制转换

时间:2014-04-23 11:55:28

标签: c

我的目标是将strings_operand_table1[i]复制到label。然后我想将label返回到我之前调用它的函数。我该如何解决这个问题?有什么更好的方法可以做到这一点?

char GetBaseDeclarationLabel(char *strings_label_table1[], char *strings_mneumonic_table1[],
         char *strings_operand_table1[], int hex_address_table1[])
{
    int i = 0;
    int cmp_str2 = 0;
    char label[20] = {0}; 
    //int k = 0; 
    //printf(" i is %s \n", strings_label_table1[1]); 
    for(i = 0; i < 503; i++)
    {
        if(strings_mneumonic_table1[i] != NULL)`enter code here`
        {
            cmp_str2 = strcmp(strings_mneumonic_table1[i], "BASE");
            if(cmp_str2 == 0)
            {
                //printf(" ??please?? \n");
                //printf(" hex_address_table1[i] is %x \n", hex_address_table1[i]);
                strcpy(label, strings_operand_table1[i]);
                //label = strings_operand_table1[i]; 
                break;
            }
        }

    }
    return label;
}

修改

这样更好吗?如果我需要使用指针,似乎更容易使函数void并且不返回任何内容。

void GetBaseDeclarationLabel(char *strings_label_table1[], char *strings_mneumonic_table1[],
         char *strings_operand_table1[], int hex_address_table1[], char *label1)
{
    int i = 0;
    int cmp_str2 = 0;
    //char label[20] = {0}; 
    //int k = 0; 
    //printf(" i is %s \n", strings_label_table1[1]); 
    for(i = 0; i < 503; i++)
    {
        if(strings_mneumonic_table1[i] != NULL)
        {
            cmp_str2 = strcmp(strings_mneumonic_table1[i], "BASE");
            if(cmp_str2 == 0)
            {
                //printf(" ??please?? \n");
                //printf(" hex_address_table1[i] is %x \n", hex_address_table1[i]);
                //strcpy(label, strings_operand_table1[i]);
                label1 = strings_operand_table1[i]; 
                break;
            }
        }

    }
    //return label;
}

2 个答案:

答案 0 :(得分:1)

将函数的返回类型更改为char* AND 不返回本地地址。

或者:

  • malloc() label的内存:

    char* label = NULL;
    
    /*... snip ... */
        if(cmp_str2 == 0)
        {
            label = malloc(strlen(strings_operand_table1[i]) + 1);
            if (label)
            {
                strcpy(label, strings_operand_table1[i]);
            }
            break;
        }
    
  • 或避免内存分配,只需将label指向strings_operand_table1中的匹配条目即可。这是正常的,因为strings_operand_table1中的条目将超出函数的范围(并且调用者可以更简单地区分失败的搜索和失败的内存分配):

    char* label = NULL;
    
    /*... snip ... */
        if(cmp_str2 == 0)
        {
            label = strings_operand_table1[i]);
            break;
        }
    

答案 1 :(得分:0)

更新函数返回类型从charchar*

char GetBaseDeclarationLabel(char *strings_label_table1[], char *strings_mneumonic_table1[],
         char *strings_operand_table1[], int hex_address_table1[])

char* GetBaseDeclarationLabel(char *strings_label_table1[], char *strings_mneumonic_table1[],
         char *strings_operand_table1[], int hex_address_table1[])

注意:

这里是返回本地数组的指针。 看看函数何时返回,本地数组的内存将不再返回,指针无效。

使用堆内存。该数组的Malloc和该数组的返回指针在使用后不要忘记释放它。