Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/71.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 不带strtok的分号拆分字符串_C_String - Fatal编程技术网

C 不带strtok的分号拆分字符串

C 不带strtok的分号拆分字符串,c,string,C,String,我用C来做这个。我一直在尝试使用分号作为分隔符拆分字符串。使用命令行参数,我将传递一个字符串,如“1+2;3+4”,我希望作为输出 1 + 2 3 + 4 我不能用strtok来做这个 我尝试在字符串中运行for循环,但它不起作用 for (int i = 0; argv[1][i] != ';';i++) { char* argv; printf("\n%s", *(argv[1][])); } 这是经过编辑的部分 for (int i =

我用C来做这个。我一直在尝试使用分号作为分隔符拆分字符串。使用命令行参数,我将传递一个字符串,如“1+2;3+4”,我希望作为输出 1 + 2 3 + 4 我不能用strtok来做这个

我尝试在字符串中运行for循环,但它不起作用

 for (int i = 0; argv[1][i] != ';';i++)
    {
        char* argv;
        printf("\n%s", *(argv[1][]));
    }
这是经过编辑的部分

for (int i = 0; argv[1][i] != ';' || argv[1][i] != '\0'; i++)
    {
        for (int j = 0; argv[1][j]; j++)
        {
            char string = argv[1][i] - argv[1][j];

            printf("\n%s", string);
        }

    }
当我试着运行时,这种情况就会发生

./check "1 + 2; 3 + 4"
number of arguments: 2
1 + 2; 3 + 4
(null)

为什么我在这里变为空?

我想你想要的是:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int
main(int argc, char **argv)
{
        char *str, *start;
        str = malloc( argc > 1 ? strlen(argv[1]) : 50 );
        strcpy( str, argc > 1 ? argv[1] : "1 + 2; 3+4" );
        /* Error checking omitted for brevity */
        do {
                for( start = str; *str && *str != ';'; str++ )
                        ;
                if(*str == ';')
                        *str++ = '\0';
                printf("%s\n", start);
        } while( *str );
}
#包括
#包括
#包括
int
主(内部argc,字符**argv)
{
char*str,*start;
str=malloc(argc>1?strlen(argv[1]):50);
strcpy(str,argc>1?argv[1]:“1+2;3+4”);
/*为简洁起见,省略了错误检查*/
做{
对于(start=str;*str&&*str!=';';str++)
;
如果(*str==';')
*str++='\0';
printf(“%s\n”,开始);
}而(*str);
}
考虑到您所声明的避免标准库中任何以string.h声明的函数的偏好,您可能更喜欢:

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

size_t len( const char *c ) {
        size_t s = 0;
        while( *c++ )
                s+=1;
        return s;
}
int
main(int argc, char **argv)
{
        char *str, *start;
        const char *target = argc > 1 ? argv[1] : "1 + 2; 3 + 4";
        start = str = malloc( len(target) + 1);
        /* Error checking omitted for brevity */
        while( (*str++ = *target++) != '\0')
                ;
        str = start;
        do {
                for( start = str; *str && *str != ';'; str++ )
                        ;
                if(*str == ';')
                        *str++ = '\0';
                printf("token: %s\n", start);
        } while( *str );
        return 0;
}
#包括
#包括
大小长度(常量字符*c){
尺寸=0;
而(*c++)
s+=1;
返回s;
}
int
主(内部argc,字符**argv)
{
char*str,*start;
常量字符*target=argc>1?argv[1]:“1+2;3+4”;
start=str=malloc(len(目标)+1);
/*为简洁起见,省略了错误检查*/
而((*str++=*target++)!='\0')
;
str=开始;
做{
对于(start=str;*str&&*str!=';';str++)
;
如果(*str==';')
*str++='\0';
printf(“令牌:%s\n”,开始);
}而(*str);
返回0;
}

您已经重新使用了变量名
argv
,因此它在其作用域中隐藏了函数参数
argv
。请不要那样做。另外,如果没有
”;,会发生什么当前?我建议使用库函数
strchr()
*(argv[1][])
的语法无效,不能有空数组下标。循环不会拆分字符串。它只搜索第一个
。您不能使用strtok的原因是什么?你能详细说明你的问题吗?
string.h
不是一个库。这是一个标题。