函数中使用的结构指针

时间:2014-12-09 13:20:11

标签: c pointers struct

我在使用指针和结构的C中遇到了一些问题: 我有2个结构Signal实体和指针activeSignal来存储其中一个实体。现在,我想使用这个"存储"我的函数printParameters()中的实体打印我的struct的值。不幸的是,我的微控制器显示器打印出一些象形文字而不是我的价值。我必须承认,我并没有完全通过指针算术......

struct SigParameter {
  char *name;
  int value;
};

struct Signal {
  struct SigParameter signalchar;
};

int main(void) {
  struct Signal s1;
  struct Signal s2;
  s1.signalchar.name = "Sinus";
  s2.signalchar.name = "Rect";
  struct Signal *activeSignal = &s1;

  printParameters(activeSignal);
}

void printParameters(struct Signal *s) {
  lcdPrintf(0,11,9,"%s", s->signalchar.name);
}

3 个答案:

答案 0 :(得分:1)

此处,您的代码中存在一些小错误。我相信这些都是错别字。

  1. printParameters()没有前瞻性声明。
  2. 在您的main()中,名为printParameter()的函数应为printParameters()
  3. struct SigParameter signalchar
  4. 之后缺少分号

    但是,如果您只想打印该值,我就不会看到使用struct Signal *activeSignal = &s1;的逻辑。

    您可以查看以下代码。

    #include <stdio.h>
    #include <stdlib.h>
    
    
    struct SigParameter {
     char *name;
     int value;
    };
    
     struct Signal {
     struct SigParameter signalchar;
    };
    
    void printParameters(struct Signal s);
    
    int main(void) {
     struct Signal s1;
     struct Signal s2;
     s1.signalchar.name = "Sinus";
     s2.signalchar.name = "Rect";
    
     printParameters(s2);
        return 0;
    }
    
    void printParameters(struct Signal s) {
        printf("%s\n", s.signalchar.name);
    }
    

    我使用了简单printf()而不是lcdPrintf(),但它运行正常。

    输出:

      

    [sourav @ broadsword temp] $ ./a.out

         

    的Rect

答案 1 :(得分:0)

struct SigParameter signalchar

在这个分号中没有放置。可能是个错误。

然后在为字符指针赋值时,必须为该指针分配内存。否则,它会将值存储在寄存器存储器中。

s1.signalchar.name = "Sinus";
s2.signalchar.name = "Rect";

您可以为该指针变量分配内存,并在其中完成工作。

然后你正在调用函数

   printParameter(activeSignal);

但功能是,

   printParameters(activeSignal);

答案 2 :(得分:0)

#include <stdio.h>
typedef struct{
    char *name;
    int value;
}SignalParameters;

typedef struct{
    SignalParameters signalchar;
}Signal;
void printSignal(Signal* s);
int main(void) {
    Signal s;
    s.signalchar.name = "Sinus";
    printSignal(&s);
    return 0;
}

printSignal(Signal * s) {
    printf("%s", s->signalchar.name);
}

这对我来说对gcc-4.8.1很有用,所以你的指针算术没什么问题。它可能与您的微控制器的clib有关。为了提供更有用的答案,我们需要知道您使用的是哪个微控制器,我们需要lcdPrintf的定义。
顺便说一下,typedef安全地在C中输入很多东西; - )。