在C中将字符串拆分为两半的问题

时间:2012-07-09 18:21:28

标签: c string pointers split strtok

我有一个包含空格的字符串,例如“print 2”或“print 3 test”。我试图删除第一个参数 - 在这些例子中,打印。

我试过strtok():

char *test;
test = strtok(COMMAND, " ");
printf("%s\n", test);

然而,打印测试将是段错误。我尝试创建一个函数,它从main()工作正常但是当从函数中调用时我需要它,它也是段错误。

char* split(char S[], int N) {
    printf("Running split() on %s\n", S);
    int Spaces = 1;
    int i = 0;
    for (i; i<strlen(S) && Spaces <=N; i++) {
        if (S[i] == ' ') {
            Spaces++;
        }
    }
    printf("split: %s\n", &S[i]);
    //return "0";
    return &S[i];
}

我猜它是某种指针问题。正在将命令传递给print函数:

Print(File, Lines, COMMAND);

2 个答案:

答案 0 :(得分:2)

我不知道你的测试样本中有什么命令,但你应该测试一下,如果strtok返回null(当strtok找不到令牌时)。 带有nullpointer的printf将为您提供seg保险库。

通常你从一个循环中调用strtok: http://www.cplusplus.com/reference/clibrary/cstring/strtok/

答案 1 :(得分:0)

始终测试strtok()的返回值!

如果没有找到这样的字节(第二个参数),即。第一个参数指向的字符串中不存在令牌,返回空指针。