请教:
问题1:
char aa[10] = {0}
char bb[20] = {0}void f1()
{
   _tcscpy(aa,"12345678");
   _tcscat(bb,aa);
}1:
现在 bb 是不是123456780000000000002:
现在我想把 bb 的前 5 位移掉
后面的补上来
变为
67800000000000000000这个呈现要怎么写
3:
当用 _tcscat 的时候
怎么知道是从哪里开始接呢
如:
当 bb 位
12345678000000000000
_tcscpy(aa,"123");
应该从  8 开始接
是不?如果想从最开始接的话
那么我需要先
memset(bb,'0',sizeof(bb));
然后
_tcscpy(aa,"123");
是吗?谢谢!

解决方案 »

  1.   

    char aa[10]={0};好像只是初始化为0,而并非为字符'0',即aa[0]='';而不是aa[0]="0";
      

  2.   

    你的问题解答如下,不过你没有弄清一个概念,
    字符0,1,2,3,4,5,6,7,8和ASCII码0,1,2,3,4,5,6,7,8是不同的。
    1.现在 bb 是:
    0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
    2.bb 的前 5 位移掉 for (int i=0;i<20;i++)
    {
    if(i<15)
    bb[i]=bb[i+5];
    else
    bb[i]=0;
    }3._tcscpy(bb,"123");是从‘8’开始接
    memset(bb,'0',sizeof(bb));
    _tcscpy(bb,"123");
    可以从最开始接
      

  3.   

    1、不是"12345678000000000000"而是"12345678",因为你初始化的是把bb全部设置为0,注意这里的0不是字符'0'.也就是说bb在内存中的是:0x3132333435363738000000000000000000000000.2、strcpy(bb,bb+5);3、这个问题主要是由于楼主没有分清楚0和'0'的区别,在内存中字符'0'是0x30.
    memset(bb,'0',sizeof(bb));是将bb全部设置为字符'0',要把bb内容清空,应该写为memset(bb,0,sizeof(bb));总的看来,楼主只要分清楚0和'0'的区别上面的问题就都可以解决了。再说一下0用转译字符表示是'\0'。
      

  4.   

    char aa[10] = {0}
    ====
    这个操作相当于字符串截断
    所以你第一个问题的答案是:不是2做个循环不就好了
    for(int i=0; i<10; i++)
    {
        if(i>5)
            bb[i]='0';
        else
            bb[i]=bb[i+5];
    }3. 你自己调一下不就知道了
      

  5.   

    你定义的是char,怎么会用_tcscpy,应该是strcpy吧。char *c;
    char temp[20];
    if ( c == strstr(aa,"6"))
    {
      _w64 iFound = c - aa;
      memcpy(temp,aa,iFound);
    }
    strcpy(aa,temp);然后写for循环把后面的都置为0。