2013-03-30 85 views
0

在这个程序中,char *标记被初始化为一个奇怪的垃圾值。我无法对它进行排序。这里的源代码:Strtok:我不知道为什么这个程序不能正常工作

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

void fetch_value(char *string,int pos,char *dest) 
{ 
    char *token; 
    int i=0; 
    token=strtok(string,","); 
    if(pos>1) 
    { 
        token=strtok(NULL,","); 
        while(i<pos-1){ 
            token=strtok(NULL,","); 
            printf("token =%s\n",token); 
            i++; 
        } 
        strcpy(dest,token); 
    } 
    else 
    { 
        strcpy(dest,token); 
    } 
} 

int main(void) 
{ 
    char checking[100]; 
    memset(checking,0x00,sizeof(checking)); 
    fetch_value("14174000100,35679700322,35679700322,35679700322, 
            35679700322,14174000999,919440710210000,1",0,checking); 
    printf("checking=%s\n",checking); 
    return 0; 
} 

您的帮助,反馈或建议,非常感谢。

+2

您此标记为 “C”。什么是''在这里做什么?这是C++和不需要的。 – Jens

回答

3

strtok的第一个参数必须是可修改的。你的代码传递一个字符串文字,它是而不是可修改的。这导致未定义的行为。

,将解决这个问题最简单的修改如下:

char numList[] = "14174000100,35679700322,35679700322,35679700322,35679700322,14174000999,919440710210000,1"; 
fetch_value(numList, 0, checking); 

你也应该注意到,strtok是较旧的函数,而不是重入的,因为它使用静态变量保存其状态。在新代码中,您应该使用函数的可重入版本 - strtok_r,这需要您传递内存以保存状态。

1

而是执行此操作:

int main(void) 
    { 
    char checking[100]; 
    memset(checking,0x00,sizeof(checking)); 
    char string[] = "14174000100,35679700322,35679700322,35679700322, 
    35679700322,14174000999,919440710210000,1"; 
    //now string can be modified. 
    fetch_value(&string[0],0,checking); 
    printf("checking=%s\n",checking); 
    return 0; 
    } 
相关问题