1

我有一个包含空格的字符串,例如“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);
4

2 回答 2

2

我不知道您的测试样本中的 COMMAND 是什么,但是您应该测试 strtok 是否返回 null (当 strtok 找不到令牌时)。带有空指针的 printf 会给你一个 seg vault。

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

于 2012-07-09T18:31:57.513 回答
0

总是测试 strtok() 的返回值!

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

于 2012-07-10T09:39:54.333 回答