如何将数据设置为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");
}
答案 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);