c - 在 C 中将字符串分成两半的问题

标签 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(File, Lines, COMMAND);

最佳答案

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

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

关于c - 在 C 中将字符串分成两半的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11400828/

相关文章:

c - 停止单个线程

java - 字符串过滤..任何一个..仅包含所选字符之一或两者

Python 3 : using %s and . 格式()

c++ - line 是什么意思?

c - 具有可变成员大小的结构

c - 将 ">>"作为 execv 参数传递?

c - 从c中的.txt文件读取二维字符串数组

在C中将二进制字符串转换为int

C 结构,指向结构的 union 指针

在 AIX 上编译 netcat