Array typedef在函数调用时,Struct无法正常运行

时间:2012-01-10 06:06:54

标签: c arrays struct typedef

我宣布

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。所以它知道它已初始化但它没有显示实际名称,只是一个空行。

有人有什么想法吗?

1 个答案:

答案 0 :(得分:1)

在功能add_data_label()中,您必须strcpy()传递char * labelLABELS_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应该在返回之前编写,以使调试打印语句正确。