int trimSpace(char *str,char *newstr)
{
char *p=str;
int ncount=0;
int i,j=0;
if(str==NULL||newstr==NULL)
{
return -1;
}
i=0;
j=strlen(p)-1;
while(isspace(p[i])&&p[i]!=”\0″)
{
i++;
}
while(isspace(p[j])&&p[j]!=”\0″)
{
j–;
}
ncount=j-i+1;
strncpy(newstr,str+j,ncount);
newstr[ncount]=”\0″;
在教程中他有这么一个函数,在最后的时候这两个本人一直不能理解。
1.strncpy(newstr,str+j,ncount);这个中str+i和str+j有什么区别,还有就是为什么这里要加i不是就是把str这个里面的元素按ncount复制到新的netstr里面吗?
2.newstr[ncount]=”\0″;这个有什么作用本人也不是太明白。
求指导答,谢谢。
{
char *p=str;
int ncount=0;
int i,j=0;
if(str==NULL||newstr==NULL)
{
return -1;
}
i=0;
j=strlen(p)-1;
while(isspace(p[i])&&p[i]!=”\0″)
{
i++;
}
while(isspace(p[j])&&p[j]!=”\0″)
{
j–;
}
ncount=j-i+1;
strncpy(newstr,str+j,ncount);
newstr[ncount]=”\0″;
在教程中他有这么一个函数,在最后的时候这两个本人一直不能理解。
1.strncpy(newstr,str+j,ncount);这个中str+i和str+j有什么区别,还有就是为什么这里要加i不是就是把str这个里面的元素按ncount复制到新的netstr里面吗?
2.newstr[ncount]=”\0″;这个有什么作用本人也不是太明白。
求指导答,谢谢。
解决方案
80
1.strncpy(newstr,str+j,ncount);这句有问题,应该是strncpy(newstr,str+i,ncount);才对
2.newstr[ncount]=”\0″这句就是在新字符串的末尾补上”\0″,不补”\0″的话输出的时候可能越界崩溃
PS:i是从前往后遍历,第一个不是空格的下标位置,而j是从后往前第一个不是空格的下标位置
2.newstr[ncount]=”\0″这句就是在新字符串的末尾补上”\0″,不补”\0″的话输出的时候可能越界崩溃
PS:i是从前往后遍历,第一个不是空格的下标位置,而j是从后往前第一个不是空格的下标位置
#include<stdio.h> #include<string.h> #include <ctype.h> int trimSpace(char *str,char *newstr) { char *p=str; int ncount=0; int i,j=0; if(str==NULL||newstr==NULL) { return -1; } i=0; j=strlen(p)-1; while(isspace(p[i])&&p[i]!="\0") { i++; } while(isspace(p[j])&&p[j]!="\0") { j--; } ncount=j-i+1; strncpy(newstr,str+i,ncount); newstr[ncount]="\0"; } void main() { char *a = " sfdsf "; char buffer[32] = {0}; trimSpace(a, buffer); printf("%s\n", buffer); }
不要迷信书、考题、老师、回帖;
要迷信CPU、编译器、调试器、运行结果。
并请结合“盲人摸太阳”和“驾船出海时一定只带一个指南针。”加以理解。
任何理论、权威、传说、真理、标准、解释、想象、知识……都比不上摆在眼前的事实!