我正忙着这个功能.
void GetBaseDeclarationLabel(char *strings_label_table1[], char *strings_mneumonic_table1[],
char *strings_operand_table1[], int hex_address_table1[], char *base_label)
{
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]);
base_label = malloc(strlen(strings_operand_table1[i])+1);
strcpy(base_label, strings_operand_table1[i]);
//base_label = strings_operand_table1[i];
break;
}
}
}
//return label;
}
Run Code Online (Sandbox Code Playgroud)
这是我的初始变量声明.我把它设为NULL的原因是因为我的警告标志抱怨它没有初始化,当我没有这样做时我有一个分段错误.既然我已经这样做了,我就无法base_label改变.我已经尝试了通常的=方法,只是为了它的地狱我尝试了malloc然后strcpy方法.这两种方法都没有改变价值.
char *base_label = NULL;
Run Code Online (Sandbox Code Playgroud)
这就是我调用函数的方式.
GetBaseDeclarationLabel(strings_label_table1, strings_mneumonic_table1,
strings_operand_table1, hex_address_table1, base_label);
Run Code Online (Sandbox Code Playgroud)
如果您的函数应分配缓冲区并返回该缓冲区,则需要将函数签名更改为
void GetBaseDeclarationLabel(char *strings_label_table1[], char *strings_mneumonic_table1[],
char *strings_operand_table1[], int hex_address_table1[], char **base_label);
Run Code Online (Sandbox Code Playgroud)
那你会的
*base_label = malloc(strlen(strings_operand_table1[i])+1);
strcpy(*base_label, strings_operand_table1[i]);
Run Code Online (Sandbox Code Playgroud)
调用者将更改为
char *base_label = NULL;
GetBaseDeclarationLabel(strings_label_table1, strings_mneumonic_table1, strings_operand_table1,
hex_address_table1, &base_label);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5856 次 |
| 最近记录: |