当前位置: 技术问答>linux和unix
linux中memcpy将结构体内的字符复制到字符串后均为空
来源: 互联网 发布时间:2016-07-29
本文导语: struct book1{ char word[7]; char word2[7]; } void test(struct book1 *aa) { char buf[15],buf2[15]; //这样没有问题 strcpy(aa->word,"aaaaaaa"); memcpy(buf,aa->word,6); //这样做就完之后aa->word,buf就全为空了。 strcpy(buf2,aaaaaaa"); strcpy(aa->word,buf2); ...
struct book1{
char word[7];
char word2[7];
}
void test(struct book1 *aa)
{
char buf[15],buf2[15];
//这样没有问题
strcpy(aa->word,"aaaaaaa");
memcpy(buf,aa->word,6);
//这样做就完之后aa->word,buf就全为空了。
strcpy(buf2,aaaaaaa");
strcpy(aa->word,buf2);
memcpy(buf,aa->word,6);
}
main()
{
struct book1 *bb;
bb=(struct book1*)malloc(sizeof(struct book1));
test(bb);
}
以上内容只是示意,buf2是从别的子函数传来的结构体也还有很多内容。没有加入。期待高手解决
char word[7];
char word2[7];
}
void test(struct book1 *aa)
{
char buf[15],buf2[15];
//这样没有问题
strcpy(aa->word,"aaaaaaa");
memcpy(buf,aa->word,6);
//这样做就完之后aa->word,buf就全为空了。
strcpy(buf2,aaaaaaa");
strcpy(aa->word,buf2);
memcpy(buf,aa->word,6);
}
main()
{
struct book1 *bb;
bb=(struct book1*)malloc(sizeof(struct book1));
test(bb);
}
以上内容只是示意,buf2是从别的子函数传来的结构体也还有很多内容。没有加入。期待高手解决
|
|
怎么可能?
$ cat love.c && make love && ./love
#include
#include
#include
struct book1 {
char word[7];
char word2[7];
};
void
test(struct book1 *aa)
{
char buf[15], buf2[15];
/* 这样没有问题 */
memset(buf, 0, sizeof(buf));
strcpy(aa->word, "aaaaaa");
memcpy(buf, aa->word, 6);
/* 这样做就完之后aa->word,buf就全为空了。 */
memset(buf, 0, sizeof(buf));
strcpy(buf2, "aaaaaa");
strcpy(aa->word, buf2);
printf("%sn", aa->word);
memcpy(buf, aa->word, 6);
printf("%sn", aa->word);
}
int
main()
{
struct book1 *bb;
bb = (struct book1 *)malloc(sizeof(struct book1));
test(bb);
}
cc -O2 -pipe love.c -o love
aaaaaa
aaaaaa
|
请注意malloc 与 free 配对使用!!!!
|
设置个断点gdb跟踪一下吧。