首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

将字符串写下到指针数组中,指向的内容无故发生变化

2013-07-09 
将字符串写入到指针数组中,指向的内容无故发生变化调试时显示的转化后的字符串是正确的,但是写入到数组后

将字符串写入到指针数组中,指向的内容无故发生变化

调试时显示的转化后的字符串是正确的,但是写入到数组后不知为什么,相同地址指向的数据无缘无故发生改变,如下图
将字符串写下到指针数组中,指向的内容无故发生变化
将字符串写下到指针数组中,指向的内容无故发生变化
将字符串写下到指针数组中,指向的内容无故发生变化
[解决办法]

    //假设s在内存地址00400100处
    i=0;
    sprintf(s+i,"%d",i);//00400100 30 00
    printf("%s\n",s+i); //0
    i=1;
    sprintf(s+i,"%d",i);//00400100 30 31 00
    printf("%s\n",s+i); //1
    i=2;
    sprintf(s+i,"%d",i);//00400100 30 31 32 00
    printf("%s\n",s+i); //2
    i=3;
    sprintf(s+i,"%d",i);//00400100 30 31 32 33 00
    printf("%s\n",s+i); //3

[解决办法]
LZ你知道哪错了吗?
s+i这个相关于每次s会移动1个字节,因为是char *型的.
你通过sprintf进行赋值时却忽略了一个字符串所占的字节.比如"1"它其它占了两个字节."12"占了三个字节,因为后面还有一个"\0".这样一来就全乱了

由你的输出就可以看出了.下面是实验:

    int i=0;
char *s=(char *)malloc(sizeof(char)*60),*string[20];
for(i=0;i<20;i++)
{
sprintf(s+i*3,"%d",i);//将i按10进制格式写入到s+i区域
printf("%s\n",s+i*3);
string[i]=s+i*3;//将字符串存入指针数组string中
}
for(i=0;i<20;i++)
{
printf("%s\n",string[i]);
}
free(s);
return 0;


热点排行
Bad Request.