[英]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.