linux下C编程(四)之*p++=*q++

    真的被这个指针弄得差点崩溃了,还算好,今天终于理解下面的这个程序了,变量放在双等号的右边,常量放在左边,结果出现了这个样子的东西,然后我就傻眼了。*p++=*q++,这一篇下面的程序会出现错误,因为这样指针p的地址早都变化(*p++),这个指针成为野指针了,对于指针q也是如此。

    

#include <stdio.h>

int main(int argc,char *argv[])
{
    int i = 1;
    int j = 2;
    int *p = &i; 
    int *q = &j; 

   // *p++ = *q++;  因为是指针所以可以这样操作
   
    //i++ = j++; 错误,等号的左边是常量
    *p++;
    *q++;
    *p = *q; 
    //*p++;
    //*q++;
    printf("i = %d\n",i);
    printf("*p = %d\n",*p);
    printf("j = %d\n",j);
    printf("*q = %d\n",*q);
   
    return 0;
}

*p++=*q++的分布写下来是这个样子


*q++;

*p++;

*p=*q;

*p++=*q++用到下面的程序才算真正的用改用的地方,可以简化程序,

#include <stdio.h>

void *escape(char *dest_str,char *src_str)
{
      char *pstr_1 = dest_str;
      char *pstr_2 = src_str;

      while(*pstr_2)
      {   
          if(*pstr_2 == '\n')
          {
              *pstr_1++ = '\\';
              *pstr_1++ = 'n';
          }else if(*pstr_2 == '\t'){
    
              *pstr_1++ = '\\';
              *pstr_1++ = 't';
          }else{    
              *pstr_1++ = *pstr_2; 
               //*pstr_1++ = *pstr_2++;如果写成个样子,上面的if else if后面都要加pstr2++,太复杂
               //于是把pstr2++提出去了
                }
          pstr_2++;
      }   
    
}

int main(int argc,char *argv[])
{
    char *src_str = "hello\n,\tworld\n";
    char dest_str[100] = {0};
    

    printf("before =%s\n",src_str);
    escape(dest_str,src_str);
   
    //print dest_str
    printf("after = %s\n",dest_str);

    return 0;
}

这个程序的功能就是对出现的 \n 和 \t 不转义,按照原生字符串打印出来




  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值