当前位置: 首页 > 知识库问答 >
问题:

what():basic_string::_m_construct null无效

冯哲彦
2023-03-14

我在做一个程序,我需要使用一个函数,它存储一个向量中的字符串的标记。这个函数不能正常工作,所以我在一个较小的程序上尝试了这个函数。当然,我使用了字符串标记器函数。但它并不像预期的那样工作。首先,代码如下:

#include <vector>
#include <string>
#include <cstring>
using namespace std;

int main()
{
    vector<string> v;
    string input = "My name is Aman Kumar";
    
    char* ptr = strtok((char*)input.c_str(), " ");
    v.push_back((string)ptr);

    while(ptr)
    {
        ptr = strtok(NULL," ");
        v.push_back((string)ptr);
    }
    cout<<"Coming out";
    for(string s:v)
    {
        cout<<s<<endl;
    }
}

现在的问题。我认为问题与命令有关:

(string)ptr

它在第一个调用中工作得很好,但在while循环中出现时会出错。如果我把它注释掉并打印ptr,那么它可以正常工作,但是程序在while循环之后终止,甚至不执行

cout<<"coming out";

不要理会向量的内容。但是,如果我不打印ptr,那么存储在向量中的第一个令牌“my”将被打印出来。我真的找不到是什么导致了这一切。任何建议都是有帮助的。

共有1个答案

凌伟泽
2023-03-14

while(ptr)
{
    ptr = strtok(NULL," ");
    v.push_back((string)ptr);
}

对于最后一个标记PTR将为null,从空指针构造std::string是未定义的行为。尝试:

while(ptr = strtok(NULL," "))
{
    v.push_back(string(ptr));
}

对于更多的C++解决方案

#include <vector>
#include <string>
#include <iostream>
#include <sstream>

int main()
{
    std::vector<std::string> v;
    std::string input = "My name is Aman Kumar";
    
    std::stringstream ss(input);
    
    std::string word;
    while(ss >> word)
    {
        v.push_back(word);
    }
    std::cout << "Coming out\n";
    for(std::string& s:v)
    {
        std::cout << s << "\n";
    }
}
 类似资料:
  • is What 是一个非常简单且小巧的 JS 类型检查功能,它同样完全支持 TypeScript npm i is-what 用法 is-what 很容易使用,并且大多数功能都可以像你所期望的那样工作。 // import functions you want to use like so:import { isString, isDate, isPlainObject } from 'is-wh

  • Masonry is a JavaScript grid layout library. It works by placing elements in optimal position based on available vertical space, sort of like a mason fitting stones in a wall. You’ve probably seen it

  • Reading this tutorial has probably reinforced your interest in using Python -- you should be eager to apply Python to solve your real-world problems. Now what should you do? You should read, or at lea

  • Prettier is an opinionated code formatter with support for: JavaScript, including ES2017 JSX Angular Vue Flow TypeScript CSS, Less, and SCSS HTML JSON GraphQL Markdown, including GFM and MDX YAML It r

  • 问题内容: 我从数据库函数返回字符串或NULL到主程序,有时会从异常中得到此错误: 我认为这是因为从数据库函数返回NULL值?有任何想法吗??? 问题答案: 您不能从声明为要返回的函数中返回(或),因为没有适当的隐式转换。您可能想返回一个空字符串 要么 如果要能够区分一个值和一个空字符串,则必须使用指针(最好是智能指针),或者可以使用

  • 问题内容: 什么 duck typing? 问题答案: 这是动态语言中没有强类型输入的术语。 这个想法是您不需要类型来调用对象上的现有方法-如果在对象上定义了方法,则可以调用它。 该名称来自短语“如果它看起来像鸭子,而象鸭子一样叫,那就是鸭子”。 维基百科有更多信息。