C语言中的rtrim(修剪字符串)

C语言中的rtrim(修剪字符串),c,trim,C,Trim,我有一个功能: char* rtrim(char* string, char junk) { char* original = string + strlen(string); while(*--original == junk); *(original + 1) = '\0'; return string; } 我这样称呼它: colTok = rtrim(colTok,"%"); colTok是char*,它包含像“80%”这样的字符串。我需要删除%。我相

我有一个功能:

char* rtrim(char* string, char junk)
{
    char* original = string + strlen(string);
    while(*--original == junk);
    *(original + 1) = '\0';
    return string;
}
我这样称呼它:

colTok = rtrim(colTok,"%");

colTok是char*,它包含像“80%”这样的字符串。我需要删除%。我相信我以前使用过这个函数,但现在它不起作用了,因为当我调试并进入它时,垃圾是-49“Ď”,而不是“%”。那有什么问题?我做错了什么?

问题是您正在向函数传递字符串,而不是字符。应该是:

colTok = rtrim(colTok, '%');

您传递的字符串
“%”
是一个字符[],其地址被视为一个字符。这就是垃圾的原因。

问题是您正在向函数传递字符串,而不是字符。应该是:

colTok = rtrim(colTok, '%');
colTok = rtrim(colTok,"%"); // "%" is a string
您传递的字符串
“%”
是一个字符[],其地址被视为一个字符。这就是为什么垃圾

colTok = rtrim(colTok,"%"); // "%" is a string
您需要传递一个字符

colTok = rtrim(colTok, '%');

我建议你总是注意你的编译器警告;假设它们是错误的

您需要传递一个字符

colTok = rtrim(colTok, '%');

我建议你总是注意你的编译器警告;假设它们是错误。

这是我在便携式C99中的rtrim

const char*C_Whitespaces=“\t\n\r\f\v”;
char*rtrim(char*s)
{
字符*r=s,*end;
尺寸长度=标准长度-1;
对于(结束=s+len;
strstr(C_空格,r+len)&end!=s;
end=s+len,*(r+(len-)=0);
返回r;
}

这是我在便携式C99中的rtrim

const char*C_Whitespaces=“\t\n\r\f\v”;
char*rtrim(char*s)
{
字符*r=s,*end;
尺寸长度=标准长度-1;
对于(结束=s+len;
strstr(C_空格,r+len)&end!=s;
end=s+len,*(r+(len-)=0);
返回r;
}

对于一个由垃圾字符组成的字符串,您的函数非常失败,例如:
char eg[]=“XXXXXXXX”;rtrim(例如,“X’)string[0]='\0'
-由于@pmgYour评论的类似原因,对于由垃圾字符组成的字符串,函数失败得很惨,例如:
char eg[]=“XXXXXXXX”;rtrim(例如,“X’)string[0]='\0'
-出于@pmgThanks评论的类似原因。我确信我已经用过了,但完全忘记了怎么用。谢谢。我确信我已经使用了它,但完全忘记了如何使用它。“注意编译器警告”,应该完全启用,是OP的最佳部分。“注意编译器警告”,应该完全启用,是OP的最佳部分。