Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/apache-flex/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将struct中的数组更改为C中的指针_C - Fatal编程技术网

如何将struct中的数组更改为C中的指针

如何将struct中的数组更改为C中的指针,c,C,我的大脑和功能: #define MAX 4096 typedef struct{ char comment[40]; int nbpts; float time[4096]; float value[4096]; } trace; void simuTrace(int tmax, float dt, float params[], trace* uneTrace){ int i = 0; float v = 0, w = 0, dv = 0, dw =

我的大脑和功能:

#define MAX 4096
typedef struct{
   char comment[40];
   int nbpts;
   float time[4096];
   float value[4096];
} trace;
void simuTrace(int tmax, float dt, float params[], trace* uneTrace){
    int i = 0;
    float v = 0, w = 0, dv = 0, dw = 0, t = 0;
    while (t<tmax && i < MAX){
        dv = (params[0]-v)*(v-1)*v - w;
        dw = params[4]*(params[1]*v-params[2]*w-params[3]);
        v += dv*dt;
        w += dw*dt;
        uneTrace->time[i] = t;
        uneTrace->value[i] = v;
        i++;
        t += dt;
    }
    uneTrace->nbpts = i+1;
    uneTrace->comment[40]= "CommentaireDeLaTrace";
}

使用
malloc

typedef struct{
    char comment[40];
    int nbpts;
    float *time;
    float *value;
} trace;

void simuTrace(int tmax, float dt, float params[], trace* uneTrace){
    int i = 0;
    float v = 0, w = 0, dv = 0, dw = 0, t = 0;
    int count = tmax/dt;
    uneTrace->time = malloc(count * sizeof(float));
    uneTrace->value = malloc(count * sizeof(float));
    while (i < count){
        dv = (params[0]-v)*(v-1)*v - w;
        dw = params[4]*(params[1]*v-params[2]*w-params[3]);
        v += dv*dt;
        w += dw*dt;
        uneTrace->time[i] = t;
        uneTrace->value[i] = v;
        i++;
        t += dt;
    }
    uneTrace->nbpts = i+1;
    strcpy(uneTrace->comment, "CommentaireDeLaTrace");
}
typedef结构{
char评论[40];
int nbpts;
浮动*时间;
浮动*值;
}痕迹;
void simuTrace(int-tmax,float-dt,float-params[],trace*uneTrace){
int i=0;
浮点数v=0,w=0,dv=0,dw=0,t=0;
整数计数=tmax/dt;
uneTrace->time=malloc(count*sizeof(float));
uneTrace->value=malloc(count*sizeof(float));
而(我<计数){
dv=(参数[0]-v)*(v-1)*v-w;
dw=params[4]*(params[1]*v-params[2]*w-params[3]);
v+=dv*dt;
w+=dw*dt;
uneTrace->time[i]=t;
uneTrace->value[i]=v;
i++;
t+=dt;
}
uneTrace->nbpts=i+1;
strcpy(uneTrace->comment,“commentairederatrace”);
}

您没有收到编译器警告吗?那么
uneTrace->comment[40]=“commentairedelaterace”呢
这会将不兼容的值(
char*
指针指向
char
)写入数组边界之外。使用
strcpy
复制字符串。您不能分配给数组,数组应该是
strcpy(uneTrace->comment,“commentairedelaterace”)
请使用
中的
MAX
来定义MAX 4096
而不是硬编码
4096
。为什么设置变量count=tmax/dt?请解释一下,您的循环将
t
0
增加到
tmax
,增加
dt
。这意味着它执行
tmax/dt
迭代,这就是它将放入数组的元素数。简单的算术。
typedef struct{
    char comment[40];
    int nbpts;
    float *time;
    float *value;
} trace;

void simuTrace(int tmax, float dt, float params[], trace* uneTrace){
    int i = 0;
    float v = 0, w = 0, dv = 0, dw = 0, t = 0;
    int count = tmax/dt;
    uneTrace->time = malloc(count * sizeof(float));
    uneTrace->value = malloc(count * sizeof(float));
    while (i < count){
        dv = (params[0]-v)*(v-1)*v - w;
        dw = params[4]*(params[1]*v-params[2]*w-params[3]);
        v += dv*dt;
        w += dw*dt;
        uneTrace->time[i] = t;
        uneTrace->value[i] = v;
        i++;
        t += dt;
    }
    uneTrace->nbpts = i+1;
    strcpy(uneTrace->comment, "CommentaireDeLaTrace");
}