C ++:奇怪的std :: cout错误

时间:2011-08-29 09:54:28

标签: c++ string boost

我认为这是一件相对简单的事情:将“www.google.ie”附加一个尾部斜杠,并将其与“http://”预先挂起,从而生成一个值为“http”的字符串://www.google.ie/”。不,这不是作业......(我知道)

现在这是我的代码:

std::string line=split1[0];   //split1[0] is "Host: www.google.ie"
std::vector<std::string> split2;
boost::split(split2,line,boost::is_any_of(" "));
boost::erase_all(split2[1],"\n");
std::cout<<"split2[1]:"<<split2[1]<<std::endl;   //outputs www.google.ie ok
fURL="http://"+split2[1]+"/";
//fURL="http://www.google.ie/";   //this is what I want fURL to be!
std::cout<<std::endl;   //just for some testing
std::cout<<std::endl;
std::cout<<std::endl;
std::cout<<std::endl;
std::cout<<std::endl;
std::cout<<"fURL:"<<fURL<<std::endl;   //should output: http://www.google.ie/?

这是我奇怪的输出:

split2[1]:www.google.ie





/URL:http://www.google.ie

我不知道'/ URL:'中的'/'来自哪里。就好像我指定的尾部斜线以某种方式被添加到前面。我真的不明白这是怎么可能的......

在Linux Ubuntu上使用g ++ 4.5.2。

非常感谢任何见解。

非常感谢,

2 个答案:

答案 0 :(得分:6)

我猜这行

  

// split1 [0]是“Host:www.google.ie”

与你说的不同。如果你通过http获得它,例如你将

  

// split1 [0]是“主持人:www.google.ie \ r \ n”

删除\ n后

  

// split1 [0]是“Host:www.google.ie \ r”

然后是fURL

  

卷起= “HTTP://” + split2 [1] + “/”; // http://www.google.ie \ r /

std::cout<<"fURL:"<<fURL<<std::endl

将打印

  

卷起:HTTP://www.google.ie

转到第一列(\ r \ n) 并打印'/'覆盖第一个字符'f'

答案 1 :(得分:1)

这是你的代码,放入一个小程序,只需要调用包含在foo()函数中的代码。它可以像你期望的那样工作,并且没有像你观察到的那样奇怪。如果我遇到像你这样的问题,我总是只用那些奇怪的代码写一个小程序。#34;怪异的#34;。正如其他人所建议的那样,必须有其他东西,那就是让事情出错。试试吧:

#include <iostream>
#include <vector>
#include <string>
#include <boost/algorithm/string/split.hpp>
#include <boost/algorithm/string/classification.hpp>
#include <boost/algorithm/string/erase.hpp>
using namespace std;

void foo(const char **split1)
{
   std::string line = split1[0];   //split1[0] is "Host: www.google.ie"
   std::vector<std::string> split2;

   boost::split(split2,line,boost::is_any_of(" "));
   boost::erase_all(split2[1],"\n");

   std::cout<<"split2[1]:"<<split2[1]<<std::endl;   //outputs www.google.ie ok

   string fURL="http://"+split2[1]+"/";
   //fURL="http://www.google.ie/";   //this is what I want fURL to be!

   std::cout<<std::endl;   //just for some testing
   std::cout<<std::endl;
   std::cout<<std::endl;
   std::cout<<std::endl;
   std::cout<<std::endl;
   std::cout<<"fURL:"<<fURL<<std::endl;   //should output: http://www.google.ie/?

}
int main()
{
    const char *split = "Host: www.google.ie";
    const char *split1[1];
    split1[0]  = split;

    foo(split1);

    return 0;
}