我有以下程序我正在尝试运行但当然,由于我缺乏良好的知识,我的程序崩溃运行时:
#include <stdio.h>
#include "ptref.h"
mystruct_t *FRSt = NULL;
int main(int argc, char* argv[])
{
char ct[2] = {0, 1, '\0'};
char dd[2] = {0, 1, '\0'};
populate_contents(FRSt, 2, "FRES", ct, dd);
return 0;
}
HEADER
/*
* ptref.h
*
*/
#ifndef PTREF_H_
#define PTREF_H_
typedef struct mystruct
{
char* ct[2]; //
char* dd[2]; // = "0\0";
char* name[]; // = "1\0";
} mystruct_t;
extern mystruct_t p;
void populate_contents(mystruct_t* mystruct_var, int arrSize, char* name[], char* dd[], char* ct[])
{
/* Initialise arrays */
int i;
i = 0;
strncpy(mystruct_var->name, name, sizeof(name));
for (i = 0; i < arrSize; i++)
{
mystruct_var->dd[i] = dd[i];
mystruct_var->ct[i] = ct[i];
}
return;
}
#endif /* PTREF_H_ */
因为我要在实时计算机中实现这一点,我不确定使用malloc
是否会给我带来麻烦。但是,我有一种感觉,因为我没有使用malloc
作为我的mystruct_var
指针,我遇到了麻烦,或者可能是我的愚蠢代码。无论如何,进一步的教育和建议将受到高度赞赏。
P.S。我已经查看过其他相关帖子,但我的问题却完全不同了。所以,我提出了一个新问题。
答案 0 :(得分:1)
首先,在main()
char ct[2] = {0, 1, '\0'};
中,由于您已将数组大小定义为2
并初始化3
数组元素,因此此特定数组初始化不正确。
在函数populate_contents(FRSt, 2, "FRES", ct, dd);
中,第三个参数是一个字符串,相应的被调用函数参数应该是char数组char name[]
或char指针char *name
。它不应该像您将name
定义为指针数组char *name[]
那样。通过ct
&amp;的论据也是如此。 dd
,它们应该只是被调用函数中的char指针,因为类型为char *
。
通过查看您对成员元素的使用方式,您声明的结构mystruct_t
也是错误的。
正如Grijesh所说,sizeof(name)
是你不想要的,因为name
是一个可能是4或8字节的指针,所以利用strlen()
得到长度你收到的字符串。