访问结构成员时读取大小1无效

0 c struct valgrind memcpy

我已经遇到了这个问题几天了,并且已经做了一些解决方法,但我需要了解我哪里出错了.

这是valgrind错误,导致分段错误和崩溃

==14609== Invalid read of size 1
==14609==    at 0x4E80F90: vfprintf (vfprintf.c:1655)
==14609==    by 0x4E87F56: fprintf (fprintf.c:32)
==14609==    by 0x4017ED: display_tickets (tm_options.c:261)
==14609==    by 0x400E5D: main (tm.c:83)
==14609==  Address 0xa is not stack'd, malloc'd or (recently) free'd
Run Code Online (Sandbox Code Playgroud)

我试图运行的代码非常简单.

void display_tickets(tm_type *tm) {

struct stock_data data;
struct stock_node *current;
memcpy(&data, tm->stock->head_stock->data, sizeof(tm->stock->head_stock->data));

  printf("%s", data.ticket_name);  /*THIS WORKS, name is as expected*/
  fprintf(stdout, "Name is %s", 40, data.ticket_name); /*this causes the read error*/

}
Run Code Online (Sandbox Code Playgroud)

ticket_name只是一个字符串(大小为40),它是"struct stock_data"的成员.

任何人都可以解释它正在做我的头脑....

Ark*_*kku 5

在线上:

fprintf(stdout, "Name is %s", 40, data.ticket_name);
Run Code Online (Sandbox Code Playgroud)

您指定格式%s,该格式要求下一个未使用的参数为字符串,但您传递的是int(40).删除40,它应该工作.(或者你的意思是格式%*s?)