这是一个初学者的问题:为什么这会打破/给出错误?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char *strtrim_right(char *p)
{
char *end;
int len;
len = strlen( p);
while (*p && len)
{
end = p + len-1;
if(isalpha(*end))
*end =0;
else
break;
}
return(p);
}
int main ()
{
char *x="PM123BFD";
strtrim_right(x);
printf("%s", x);
return 0;
}
答案 0 :(得分:11)
更改
char *x="PM123BFD";
到
char x[]="PM123BFD";
您无法修改字符串文字,因此请将函数传递给它可以修改的char
数组。
答案 1 :(得分:5)
我不明白它为什么会破坏 - 我宁愿期待一个无限循环:while
条件总是为真,循环永远不会离开。
重做循环条件,它是borked。然后查看您拥有的变量:您永远不会更改p
或len
的值。这不对。此外,循环内部的代码比需要的复杂得多。想想你是否真的需要三个变量。
答案 2 :(得分:0)
好的,多亏了上面的2个答案,现在似乎还可以:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char *strtrim_right(char *p)
{
char *end;
int len;
len = strlen( p);
while (*p && len)
{
end = p + len-1;
if(isalpha(*end))
*end =0;
else
break;
len = strlen(p);
}
return(p);
}
int main ()
{
char x[]="PM123BFD";
strtrim_right(x);
printf("%s", x);
return 0;
}