我在使用指针和结构的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);
}
答案 0 :(得分:1)
此处,您的代码中存在一些小错误。我相信这些都是错别字。
printParameters()
没有前瞻性声明。main()
中,名为printParameter()
的函数应为printParameters()
。struct SigParameter signalchar
但是,如果您只想打印该值,我就不会看到使用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中输入很多东西; - )。