2014-12-13 67 views
0

这是我的程序。 (对不起,常量和结构和变量的名字在我的语言)更改内存地址而不是结构中的值C

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 
#include <math.h> 
#include <time.h> 

/*CONSTANTES*/ 
#define MAX_CHAR 8 
#define MAX_NOM_IMPR (20+1) 
#define NUM_ELEM 10 
#define MAX_IMPR 4 
#define MAX_FICHEROS 6 
#define ERROR_ARGC 0 
#define ERROR_LONG 1 
#define ERROR_COLALLENA 2 
#define ERROR_NO_OPCION 3 
#define ERROR_MAX_IMPR 4 
#define ERROR_NOM_REP 5 
#define ERROR_NO_IMP 6 
#define ERROR_NO_IMP_REP 7 
#define ERROR_LONG_IMPR 8 

/*TIPOS DE DATOS*/ 
typedef char Telemento[MAX_CHAR+5]; 

typedef struct{ 
    Telemento arraycola[NUM_ELEM]; 
    int inicio; 
    int final; 
}TCola; 

typedef char TNombreImpresora[MAX_NOM_IMPR]; 

typedef struct{ 
    TNombreImpresora nombreimpresora; 
    int numerodeficherosencola; 
    TCola colaImpresora; 
}TImpresora; 

typedef struct{ 
    TImpresora impresora; 
    int ocupado; 
}TCelda; 

typedef TCelda Tlistaimpresora[MAX_IMPR]; 


int main(){ 
    Tlistaimpresora listaimpresora; 

    listaimpresora[1].ocupado=1; 
    printf("%s", listaimpresora[1].ocupado); 
} 

当我运行它,它崩溃,我想通了,:除了更改的ocupado的价值,我改变了内存地址和我不知道为什么。我究竟做错了什么?

+0

你使用哪种数据类型? – 2014-12-13 13:45:50

+0

你没有显示足够的代码。添加Tlista的定义无论如何 – MightyPork 2014-12-13 13:47:27

+3

'printf(“%s”,listaimpresora [1] .ocupado);'你发送一个'int'到'printf'格式,需要一个以空字符结尾的字符串。 – WhozCraig 2014-12-13 13:52:59

回答

3

您没有发布Tlistaimpresora结构详细信息。

但是,有一些常见的错误。

  1. 您已经定义Tlistaimpresora类型的单变量,你所访问listaimpresora[1]

  2. 考虑Tlistaimpresorastruct abc *的typedef,你没有为变量分配内存。


编辑:

好,完整的代码之后,它看起来你的问题是在这里

printf("%s", listaimpresora[1].ocupado); 

listaimpresora[1].ocupadoint型的,需要%d格式说明。 %s说明符用于打印字符串,并期望以null结尾的字符串进行打印。

2

您正在以字符串格式打印整型变量。所以这是得到分段错误的原因。所以把它变成

printf("%d", listaimpresora[1].ocupado); 

你会得到答案。