我写了一些使用socketcan的代码(制作一个candump)。使用此代码我初始化socketcan。初始化后,我在终端创建了一个candump。我读入变量的那些值。现在我想将这个变量与一个字符串进行比较。
字符串具有特定格式。当我手动运行candump时,我得到以下格式:
can0 71A [1] 7F
(2x空格)can0(2x空格)71A(3x空格)[1](2x空格)7F。
我能够将终端输出读入变量(结果)
string result = //the string is loaded
**现在我希望在变量“result”中的文本不等于以下字符串时执行一些代码:
" can0 71A [1] 7F"
以下代码块用于比较。
if(result!=" can0 71A [1] 7F"){
cout<<"input changes";
}
当我执行此代码并在总线上发送以下字符串时。与上述相同:
" can0 71A [1] 7F"
代码打印:
"input changes"
(通常不应该打印任何东西)
当我在公交车上发送以下字符串时:
" can0 19B [1] 6A"
它还会打印: “输入变化”
(这很好)
我试图将空格更改为制表符,但没有任何结果。
知道问题可能是什么以及如何解决这个问题?
*编辑1 * 以下是我将代码读入变量“result”的代码。 (如果你在我的代码中看到其他愚蠢的事情,请求请给予一些建设性的批评!我想从我的项目中学习。)
std::string GetCmdOutput(const char * cmd)
{
char buffer[128];
string result;
string different;
FILE* pipe = popen(cmd,"r");
int counter=0;
if(!pipe) throw runtime_error("popen() failed!");
try {
if(fgets(buffer,128,pipe) !=NULL){
while(counter<2){
result +=buffer;
cout<<result + "\n";
if(result!=" can0 71A [1] 7F" || result != " can0 71A [1] 04" )
{
cout<<"changed!\n";
different = result;
}
}
}catch(...){
pclose(pipe);
throw;
}
pclose(pipe);
pauseCan();
return different;
}
亲切的问候, TM