PingShanJuShi 2015-06-21 02:02 采纳率: 25%
浏览 1653

字符串操作出现意外状况

操作系统为win7,开发工具为vs2010,C语言中我定义了一个结构体,typedef struct amqp_init{
char exchange[20];
char routekey[20];
char type[10];
amqp_socket_t* socket;
amqp_connection_state_t conn;
amqp_basic_properties_t props;
amqp_queue_declare_ok_t* havequeue;
struct amqp_connection_info conn_info;
}amqpinit;然后通过strcpy或者strcpy_s赋值给里面的exchange和routekey还有type

struct amqp_init* const cy_amqpinit;(已经申请过空间了,由于无关问题就不写出来了)
exchange = "cy.innerSendExchangeOne";
routekey = "cy.innerSendQueueOne";
 strcpy_s(cy_amqpinit->exchange,strlen(exchange) + 1,exchange);
    strcpy_s(cy_amqpinit->routekey,strlen(routekey) + 1,routekey);
    strcpy_s(cy_amqpinit->type,strlen("direct") + 1,"direct");

发现运行第二句的时候会将routekey的值添加到刚赋值过的cy_amqpinit->exchange后面,运行到第三句时也会将“direct”添加到赋值过的cy_amqpinit->routekey和cy_amqpinit->exchange后面。所以本来应该是
cy_amqpinit->exchange = "cy.innerSendExchangeOne";
cy_amqpinit->routekey = "cy.innerSendQueueOne";
结果现在变成
cy_amqpinit->exchange = "cy.innerSendExchangeOnecy.innerSendQueueOnedirect";
cy_amqpinit->routekey = "cy.innerSendQueueOnedirect";
另外三句strcpy语句中间没有任何语句了,求有经验的大神指教

  • 写回答

2条回答 默认 最新

  • oyljerry 2015-06-21 05:03
    关注

    你exchange等只有20的长度空间,strcpy_s复制的字符串长度超过了,越界了。

    评论

报告相同问题?

悬赏问题

  • ¥15 java 操作 elasticsearch 8.1 实现 索引的重建
  • ¥15 数据可视化Python
  • ¥15 要给毕业设计添加扫码登录的功能!!有偿
  • ¥15 kafka 分区副本增加会导致消息丢失或者不可用吗?
  • ¥15 微信公众号自制会员卡没有收款渠道啊
  • ¥15 stable diffusion
  • ¥100 Jenkins自动化部署—悬赏100元
  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘