使用strtok和数组时出错

时间:2015-02-26 18:47:03

标签: c++ strtok

我尝试拆分字符串并使用strtokstrncpy将结果放入数组中,但是当代码运行时,它会抛出错误。

代码段:

#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <string.h>

using namespace std;

int main() 
{    
    char str[] ="( 6 + 2 )";
    char *pch;
    int i = 0;

    pch = strtok(str, " ");  

    while (pch != NULL)
    {
         printf("%s\n", pch);     
         pch = strtok (NULL, " ");  
         i = i + 1;
    }

    char arreglo[i];

    strncpy(arreglo, pch, sizeof(arreglo));

    cin.get();
}

有人可以告诉我我做错了什么或如何解决它?

2 个答案:

答案 0 :(得分:1)

strncpy( arreglo, pch, sizeof(arreglo) );

此语句提供细分错误,因为pchNULL

答案 1 :(得分:0)

此代码段

char arreglo[i];

strncpy( arreglo, pch, sizeof(arreglo) );

毫无意义。

首先,C ++中没有可变长度数组。所以最好不要使用编译器的这种扩展。

其次退出前一循环pch后等于NULL。而且这句话

strncpy( arreglo, pch, sizeof(arreglo) );

没有做你想做的事。

我认为你的意思是以下

#include <vector>
#include <string>

//...

std::vector<std::string> v;

pch = strtok( str, " " );  

while ( pch != NULL )
{
         printf ("%s\n",pch);     
         v.push_back( pch );
         pch = strtok( NULL, " " );  
}