[英]Pointer on Struct used in function
我在C中有一些带有指针和结构的问题:我有2个struct 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);
}
在这里,您的代码中存在一些小错误。 我相信这些都是拼写错误。
printParameters()
前瞻性声明。 main()
,调用的函数是printParameter()
,它应该是printParameters()
。 struct SigParameter signalchar
后缺少分号 但是,我没有看到使用struct Signal *activeSignal = &s1;
逻辑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
矩形
struct SigParameter signalchar
在这个分号中没有放置。 可能是个错误。
然后在将值赋给字符指针时,必须为该指针分配内存。 否则,它会将值存储在寄存器存储器中。
s1.signalchar.name = "Sinus";
s2.signalchar.name = "Rect";
您可以为该指针变量分配内存并执行该操作。
然后你正在调用该函数
printParameter(activeSignal);
但功能是,
printParameters(activeSignal);
#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中输入很多东西;-)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.