【问题标题】:Convert string to constant char将字符串转换为常量字符
【发布时间】:2013-11-27 21:23:18
【问题描述】:

我正在尝试将我的字符串转换为可以与 strtok 函数一起使用的 const char。我究竟做错了什么?

int _tmain(int argc, _TCHAR* argv[])
{
    char * pointer_char;
    int pos = 0;
    std::string str = "   Hello good sirtttttt..!.";
    int i = 0;
    int length = str.length();  
    const char * cstr = str.c_str();

    cout << "Testing string is " << str << endl << endl;
    pointer_char = strtok (str.c_str()," ,.;-!?@#$%^&");
}

【问题讨论】:

  • 你有什么问题?意外结果,错误消息.. ?
  • 您遇到错误了吗?我看到问题在于str.c_str() 返回一个const char *,而strok 收到一个非const,这样的情况通常会发出编译器错误。您应该向我们提供这些信息,以便更无缝地推断问题。

标签: c++


【解决方案1】:

不要将.c_str() 结果与strtok 直接一起使用。

strtok 需要 char* 而不是常量,它会尝试更改传递的字符串。由于您传递的字符串来自const char*,因此无法更改它。如果您在将其传递给此函数之前尝试将其转换为非 const 类型,则将调用 未定义的行为

您需要制作一个副本,然后将该副本传递给strtok,例如:

char *c = strdup(str.c_str()); // It's not standard but simple to write
pointer_char = strtok(c," ,.;-!?@#$%^&");
free(c);

尽量不要专门在 C++ 中使用strtok(你有很多选择),它不是线程安全的。

【讨论】:

    【解决方案2】:

    strtok 不采用const char * 作为第一个参数,它采用char*。字符串必须是可修改的。

    char *strtok (char *str, const char *delimiters);
    

    str 要截断的 C 字符串。 请注意,这个字符串是通过分解成更小的字符串(令牌)来修改的。 或者,可以指定一个空指针,在这种情况下,函数会继续扫描之前成功调用函数的位置。

    【讨论】:

      猜你喜欢
      • 2012-09-20
      • 2011-10-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-10
      相关资源
      最近更新 更多