我宣布
typedef struct LABELS_STRUCT {
char *name;
int address;
} `LABELS_STRUCT;`
LABELS_STRUCT labels_array[ARRAY_LABELS];
和一个添加名称和地址的函数
int add_data_label(char * label, int displace)
{
LABELS_STRUCT x = {label,DATA_STARTING_ADDRESS + (100 * displace)};
labels_array[initialize]=x;
initialize++;//=initialize+displace;
printf("\tAdding [%s] with offset [%d] to labels_array[%d] with address [%d]\n", label,displace,initialize,CODE_STARTING_ADDRESS + (100 * displace));
printf("\tlabels_array[%d].name=[%s] and labels_array[%d].address= [%d]\n", initialize, labels_array[initialize].name, initialize, labels_array[initialize].address);
return 1;
}
第二个printf()
语句正确打印出数据,但是当我有另一个函数时
int get_label_address(char *label) {
int i;
printf("Getting the Label Address for [%s]\n", label);
for (i = 0; i < initialize; i++) {
printf("\t\t\tCOMPARING LABEL [%s] TO [%s] at index [%d]\n", label, labels_array[i].name,i);
if (labels_array[i].name==label) {
printf("Label_Array[%d]=[%s] Matches label=[%s] with address [%d]\n",i,labels_array[i].name,label,labels_array[i].address);
return labels_array[i].address;
}
}
return 0;
}
调试printf()
语句"COMPARING LABEL [%s] to [s]..."
循环显示其与null
进行比较。当我使用任何其他函数在labels_array[i].name
中打印元素时,它为name元素提供了空白值,但没有为address元素提供空白值。假设我在数组中添加了三个元素,labey_array[1 2 and 3]
将是一个空行,但label_array[4 and on]
将有null
。所以它知道它已初始化但它没有显示实际名称,只是一个空行。
有人有什么想法吗?
答案 0 :(得分:1)
在功能add_data_label()
中,您必须strcpy()
传递char * label
到LABELS_STRUCT
的{{1}}。您还应该使用char *name;
在name
的{{1}}中为LABELS_STRUCT
分配内存。
基本上,您需要以下内容:
x
注意几点:
malloc()
所有#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct LABELS_STRUCT {
char *name;
int address;
} LABELS_STRUCT;
#define ARRAY_LABELS 10
LABELS_STRUCT labels_array[ARRAY_LABELS];
int labels_array_index;
int add_data_label(char * label, int displace)
{
int len = strlen(label);
printf("len = %d \n", len);
if ((labels_array[labels_array_index].name = (char *) malloc(sizeof(char) * len + 1)) == NULL) {
printf("unable to allocate memory \n");
return -1;
}
strcpy(labels_array[labels_array_index].name, label);
printf("name = %s \n", labels_array[labels_array_index]);
labels_array[labels_array_index].address = displace;
labels_array_index++;
/* here you can copy displace to LABELS_STRUCT's address */
}
int main(void)
{
labels_array_index = 0;
add_data_label("abc", 19);
return 0;
}
'内存。因此,与free()
类似,您应该malloc()
为add_data_label()
致电delete_data_label()
。free()
初始化为有效值name
语句initialize
应该在返回之前编写,以使调试打印语句正确。