当前位置:  技术问答>linux和unix

用memcpy时段错误,帮忙看看

    来源: 互联网  发布时间:2016-06-11

    本文导语:  作用:去掉字符串前后的空格 #include  #include  #include  #include    char * del_blank(char *value) {      unsigned len = strlen(value);      char *p1 = value;      char *p2 = value + len - 1;        while(*p1 == ' ') p1++; ...

作用:去掉字符串前后的空格

#include 
#include 
#include 
#include 
 
char * del_blank(char *value)
{
     unsigned len = strlen(value);

     char *p1 = value;
     char *p2 = value + len - 1;
 
     while(*p1 == ' ') p1++;
     while(*p2 == ' ') p2--;

     memcpy(value, p1, p2-p1+1);
     *(value + (p2 - p1) + 1) = '';
 
     return value;
}

int main()
{
    char *s = " 10000 ";
    s = del_blank(s);
    printf("%sn", s);
    return 0;
}


|


诸多错误  试图修改 全局静态常量存储区(core dump 由来) 

memcpy 重叠区域 

#include 
#include 
#include 
char *del_blank(char *pstr)
{
    if(NULL == pstr)
        return pstr;

    char *ph = pstr,*pt = pstr + strlen(pstr);
    while(*--pt == ' ') *pt = '';
    while(*ph == ' ') ph++;

    if(ph == pstr)
        return pstr;

    char *sdup = strdup(ph);
    if(NULL == sdup)
        return NULL;

    strcpy(pstr,sdup);
    free(sdup);
    sdup = NULL;
    return pstr;
}

int main()
{
    char s[] = "  10000  ";
    del_blank(s);
    printf("%sn", s);
    return 0;
}


小试一下
代码还是冗余太多,唉,不够满意,应该能该简约 明了 高校。。。




|
晕,你value与p1的内存是重叠的,怎么可能copy呢
弄个临时变量

|

char * del_blank(char *value1,char *ans)
{
char value[20];

     unsigned len = strlen(value1);

  memcpy(value,value1,len);         //用一个副本把常量区的数据拷贝过来
value[len]='';
++len;
     char *p1 = value;
     char *p2 = value + len - 1;
 
     while(*p1 == ' ') p1++;
     while(*p2 == ' ') p2--;

     memcpy(ans, p1, p2-p1+1);          //不要试图在重叠区域拷贝,结果是未定的
     *(ans + (p2 - p1) + 1) = '';
 
     return ans;
}

int main()
{
    char *s = " 10000 ";       //常量区的数据,别试图修改,
char ans[20]={0};
    s = del_blank(s,ans);
    printf("%sn", s);
    return 0;
}

    
 
 

您可能感兴趣的文章:

 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • strcpy和memcpy哪个效率高,提倡用哪个?
  • 关于memcpy的使用!
  • memcpy的问题???
  • memcpy函数和printf函数的源码
  • memcpy的效率怎么这么低啊
  • glibc库的新旧和memcpy的性能有关吗??新的库拷贝的更快吗????
  • Linux 下 memcpy()有Segmentation fault
  • socket memcpy的使用
  • 各位大虾:请问UNIX环境下C语言函数memcpy拷贝的字符的长度有没有限制,若有,能不能修改,怎么修改?
  • 用malloc分配内存后,用memcpy将字符串复制进去
  • 深入理解strcpy与memcpy的区别
  • 基于C++执行内存memcpy效率测试的分析
  • 浅析C++中memset,memcpy,strcpy的区别
  • linux中memcpy将结构体内的字符复制到字符串后均为空
  • C++中memcpy和memmove的区别总结
  • 深入理解memmove()与memcpy()的区别以及实现方法
  • 字符串拷贝函数memcpy和strncpy以及snprintf 的性能比较
  • linux下如何在内核空间实现memcpy的汇编代码?


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3