我已经将一个xml文件读入char []并尝试将该数组中的每个元素与某些字符进行比较,例如“<”和“>”。 char数组“test”只是一个元素的数组,包含要比较的字符(我必须像这样做,否则strcmp方法会给我一个关于将char转换为cons char *的错误)。然而,有些事情是错的,我无法弄清楚。这是我得到的:
<被比作:< strcmp值:44
知道发生了什么事吗?
char test[1];
for (int i=0; i<amountRead; ++i)
{
test[0] = str[i];
if( strcmp(test, "<") == 0)
cout<<"They are equal"<<endl;
else
{
cout<<test[0]<< " is being compare to: "<<str[i]<<" strcmp value= "<<strcmp(test, "<") <<endl;
}
}
答案 0 :(得分:4)
strcmp()
期望它的两个参数都是以空字符结尾的字符串,而不是简单的字符。如果要比较字符的相等性,则不需要调用函数,只需比较字符:
if (test[0] == '<') ...
答案 1 :(得分:1)
你需要0终止你的测试字符串。
char test[2];
for (int i=0; i<amountRead; ++i)
{
test[0] = str[i];
test[1] = '\0'; //you could do this before the loop instead.
...
但是如果你总是打算一次比较一个字符,那么根本不需要临时缓冲区。你可以这样做
for (int i=0; i<amountRead; ++i)
{
if (str[i] == "<")
cout<<"They are equal"<<endl;
else
{
cout << str[i] << " is being compare to: <" << endl;
}
}
答案 2 :(得分:1)
strcmp希望两个字符串都以0结尾。
如果您有非0终止字符串,请使用strncmp:
if( strncmp(test, "<", 1) == 0 )
由您来确保两个字符串的长度至少为N个字符(其中N是第3个参数的值)。 strncmp是您心理工具包中的一个很好的功能。