-1

有一个名为“AAA.h”的头文件。在这个头文件中,我们定义了一个名为 的结构lrd,它看起来像:

struct lrd
{   
int     tc;
char    ptc[5];
char    stc[5];
char    ath[5];
int     vc;
};
struct lrd lr;

这个头文件“AAA.h”包含在两个不同的文件名“BBB.c”和“CCC.c”中。我们lr在“BBB.c”文件中为结构变量赋值如下:

lr.tc=tc;
memcpy(lr.ptc,ptc,sizeof(ptc));
memcpy(lr.stc,stc,sizeof(stc));
memcpy(lr.ath,ath,sizeof(ath));
lr.vc=vc;

以上源变量从数据库中获取值。lr我们在“CCC.c”文件中使用结构变量。我们使用结构 lrd 变量如下:

char *ptc()
{
    sprintf(str, "lr.ptc(%s)", lr.ptc);
    trace(str);
    return lr.ptc;
}
char *stc()
{
    sprintf(str, "lr.stc(%s)", lr.stc);
    trace(str);
    return lr.stc;
}

变量 stc 在“CCC.c”文件中给出了错误的值。 请帮我弄清楚。

4

3 回答 3

1

看看怎么benjarobin说。我只是给你看一个小脚印

AAA.h

#ifndef _AAA_H
struct abc
{
 int x;
 char *y;
 char *Z;
};


extern struct abc p;

extern void assign(void);
extern void display (void);
#endif

CCC.c

#include <stdio.h>
#include "AAA.h"

struct abc p; // Deceleration of p
void assign ()
{
    p.x=20;
    p.y="abcd";
    p.Z="xyz0";

    return;
}

BBB.c

#include <stdio.h>
#include "AAA.h"


void display (void)
{
    printf("x = %d, y =%s, z=%s",p.x,p.y,p.Z);

}

DDD.c 包含main function.

#include <stdio.h>
#include "AAA.h"
void main ()
{
    printf("\n\nAssigning Values\n\n");
    assign ();

    printf("\n\nIN BBB.c\n\n");
    display ();

    printf("\n\nIN MAIN\n\n");
    printf("x = %d, y =%s, z=%s",p.x,p.y,p.Z);


}

输出是

Assigning Values



IN BBB.c

x = 20, y =abcd, z=xyz0

IN MAIN

x = 20, y =abcd, z=xyz0
于 2012-12-12T09:49:59.637 回答
1

您的代码显示:

memcpy(lr.ptc,ptc,sizeof(ptc));
memcpy(lr.stc,stc,sizeof(stc));
memcpy(lr.ath,ath,sizeof(ath));

它不显示ptc,stc或的声明ath。由于您要复制到lr.ptcetc,因此操作数sizeof()应该是lr.ptcetc,而不是源的大小。或者,如果您非常小心,请选择两种尺寸中的最小值。

您可以/应该使用以下方法进行调试:

printf("%d (%s)(%s)(%s) %d\n", lr.tc, lr.ptc, lr.stc, lr.ath, lr.vc);

任务完成后立即。如果这显示了错误的值,那么您就知道问题出在作业中。如果这显示了正确的值,那么您可以开始寻找流浪指针和其他此类可怕的问题。

没有证据表明这是问题所在,因为您没有生成 SSCCE(简短、自包含、正确示例)。具体来说,您只生成了代码片段,而不是三个源文件的集成集(尽管我们可以从给定的信息中推断出标题)。如果没有实际演示问题的代码(所有这些,包括所有变量和函数的定义——但不包括任何多余的材料),我们只能推测。

于 2012-12-12T15:27:27.913 回答
0

应避免使用外部变量,但如果您仍想使用全局变量,则应执行以下操作:

  • 在 .c 文件中声明变量

    结构 lrd lr;

  • 在 .h (AAA.h) 中添加外部定义

    外部结构 lrd lr;

于 2012-12-12T09:35:06.460 回答