当前位置: 技术问答>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.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。