C 函数中使用的结构上的指针
在C语言中,指针和结构有一些问题: 我有两个structC 函数中使用的结构上的指针,c,pointers,struct,C,Pointers,Struct,在C语言中,指针和结构有一些问题: 我有两个structSignal实体和指针activeSignal来存储其中一个实体。现在,我想在函数printParameters()中使用这个“存储”实体来打印我的结构的值。不幸的是,我的微控制器显示器打印的是一些象形文字,而不是我的值。我必须承认我并没有完全看完指针运算 struct SigParameter { char *name; int value; }; struct Signal { struct SigParameter si
Signal
实体和指针activeSignal
来存储其中一个实体。现在,我想在函数printParameters()
中使用这个“存储”实体来打印我的结构的值。不幸的是,我的微控制器显示器打印的是一些象形文字,而不是我的值。我必须承认我并没有完全看完指针运算
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代码>如果您只是想打印值
您可以检查以下代码
#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);
}
#包括
#包括
结构参数{
字符*名称;
int值;
};
结构信号{
结构SIG参数signalchar;
};
无效打印参数(结构信号);
内部主(空){
结构信号s1;
结构信号s2;
s1.signalchar.name=“窦房结”;
s2.signalchar.name=“Rect”;
打印参数(s2);
返回0;
}
无效打印参数(结构信号s){
printf(“%s\n”,s.signalchar.name);
}
我使用了simpleprintf()
代替了您的lcdPrintf()
,但效果很好
输出:
[sourav@broadsword温度]$/a.out
直肠
在本文件中,不使用分号。也许这是个错误
然后,在为字符指针赋值时,必须为该指针分配内存。否则,它将把值存储在寄存器内存中
s1.signalchar.name = "Sinus";
s2.signalchar.name = "Rect";
您可以为指针变量分配内存,并在其中执行工作
然后调用函数
printParameter(activeSignal);
但功能是,
printParameters(activeSignal);
#包括
类型定义结构{
字符*名称;
int值;
}信号参数;
类型定义结构{
信号参数信号字符;
}信号;
无效打印信号(信号*s);
内部主(空){
信号s;
s、 signalchar.name=“窦房结”;
打印信号&s;
返回0;
}
打印信号(信号*s){
printf(“%s”,s->signalchar.name);
}
这对我来说在gcc-4.8.1上是有效的,所以你的指针算法没有问题。这可能与微控制器的clib有关。为了给出更有用的答案,我们需要知道您使用的是哪个微控制器,我们需要lcdPrintf的定义。
顺便说一下,typedef可以安全地使用C;-)进行大量键入 我绝对不是C语言专家,但这对我来说似乎是正确的。如果您将s->signalchar.name
替换为简单的“Hello”
,它是否正常工作?请与我交流片刻,然后尝试printf(“%s”,s->signalchar.name”)代码>。代码在我看来很好;除了name
应该是const char*
的事实之外,如果要为其分配文本,您确定lcdPrintf
工作正常吗?您是否尝试过lcdPrintf(0,11,9,“%s”,“Sinus”)代码>?在结构中添加分号。lcdPrintf()可以正常工作。我可以很容易地打印“窦”。分号也不是问题:/您是否考虑过在顶部添加函数原型<代码>无效打印参数(结构信号*s)代码>在结构定义之后,或者可能在main
之前定义函数printParameters
。我认为s1.signalchar.name=“窦房结”中没有问题代码>嗯,这只是我代码的摘录。如果我使用printParameters(s2),它可以正常工作。但是我想实现更动态一点,所以我试着用struct@JulianHerbel如何动态?比如更改值和/或内存分配?除此之外,对于任何类型的操作,上述代码都可以正常工作。@JulianHerbel 1)要修改值,只需传递&s1
或&s2
。2) 注意,字符串文本通常是只读的。
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);
}