2 pingshanjushi PingShanJuShi 于 2015.06.21 10:02 提问

字符串操作出现意外状况

操作系统为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
oyljerry   Ds   Rxr 2015.06.21 13:03

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

PingShanJuShi
PingShanJuShi 恩,越界为何不提示错误而还要添加
2 年多之前 回复
CSDNword
CSDNword   2015.07.30 20:45

c编译器一般对数组下表不进行越界检测。测出出现了数组越界。

Csdn user default icon
上传中...
上传图片
插入图片