Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 斯特托克:我不知道为什么这个项目总是失败_C - Fatal编程技术网

C 斯特托克:我不知道为什么这个项目总是失败

C 斯特托克:我不知道为什么这个项目总是失败,c,C,在这个程序中,char*标记是用一个奇怪的垃圾值初始化的。我无法对它进行排序。以下是源代码: #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

在这个程序中,char*标记是用一个奇怪的垃圾值初始化的。我无法对它进行排序。以下是源代码:

#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;
}
#包括
#包括
#包括
void fetch_值(char*string、int pos、char*dest)
{
字符*令牌;
int i=0;
令牌=strtok(字符串,“,”);
如果(位置>1)
    {
令牌=strtok(空,“”,“”);

while(istrtok
的第一个参数必须是可修改的。您的代码传递了一个不可修改的字符串文本。这会导致未定义的行为

解决此问题的最简单修改如下:

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

您还应该注意,
strtok
是一个不可重入的旧函数,因为它使用静态变量来保存其状态。在新代码中,您应该使用该函数的可重入版本-,它需要您传递内存来保存状态。

strtok的第一个参数必须是可修改的ode传递一个不可修改的字符串文本。这会导致未定义的行为

解决此问题的最简单修改如下:

char numList[] = "14174000100,35679700322,35679700322,35679700322,35679700322,14174000999,919440710210000,1";
fetch_value(numList, 0, checking);
您还应注意,strtok是一个不可重入的旧函数,因为它使用静态变量保存其状态。在新代码中,您应使用该函数的可重入版本-,它要求您传递内存以保存状态。

请改为:

 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;
    }
改为这样做:

 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;
    }
你把这个标记为“C”。什么是<代码> <代码>?这里是C++和不需要的。你把它标记为“C”。这里是什么?<代码> <代码>?这是C++和不需要的。