将数据添加到struct中的数组

时间:2014-03-09 02:29:15

标签: c arrays visual-studio-2010 struct

如何将数据设置为3行数组,同时具有4个元素的数组?

#include <stdio.h>
#include <stdlib.h>
#include "string.h"

typedef struct
{
    char value[6];
} MyType;

typedef struct
{
    int size;
    MyType *values;
} NewType;

static NewType car;
static MyType mytype = {{'\0'}};

void Init(NewType *car)
{
    car->size = 3; // Will contain 3 rows of 4 elements
    car->values = (MyType*) calloc(car->size,sizeof(MyType));
}

// Get data into
void Write(NewType *car, MyType *data)
{
   strcpy(car->values[0].value, data[0].value); // ** Here is where complains

   printf("%d\n", car->values[0]); // Printing wrong data!
}

int main()
{
    Init(&car);

    strcpy(mytype.value, "Hello"); 

    Write(&car, &mytype);

    system("PAUSE");
}

2 个答案:

答案 0 :(得分:1)

在这段代码strcpy(mytype.value, "Hello");中,您将5个字母的字符串复制到4个字符的数组中,这是非法的,因此可能会导致错误。将您复制的字符串更改为mytype.value以获取较短的字符串(如"Bye")或将value字符数组中的元素数增加到您想要的字符数。在那里加上一个用于终止空字符。

此外,printf()函数中的Write()语句有一个格式字符串,表示打印int,我怀疑你真正想要的是什么。以下是重写的Write()main()函数。

void Write(NewType *car, MyType *data)
{
   strcpy(car->values[0].value, data->value);

   printf("%s\n", car->values[0].value); 
}

int main()
{
    Init(&car);

    strcpy(mytype.value, "Bye"); 

    Write(&car, &mytype);

    system("PAUSE");
}

答案 1 :(得分:0)

在你的printf("%d\n", car->values[0])中,你实际上是在尝试打印你Init()内部已调用的内存的前4个字节,格式为带符号的十进制整数。 (在x86的情况下为4。sizeof(int)一般)。

要打印该值,您应该:

printf("%s\n", car->values->value);