在C编程中对字符串进行Tokenise

时间:2015-10-14 12:56:40

标签: c

我是C编程的新手,我知道有关如何将字符串拆分为单词的其他解释,但它们似乎都与我的程序不相似。我在查找程序中的错误时遇到了困难:

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

int tokenise(char str[], int start, char result[]) {
    if (str[start] == "/o") {
        return -1;
    } else {
        result = str[start];
    }
}


int main() {    
    const int MAX_STRING = 256;
    char buffer[MAX_STRING];
    fgets(buffer, MAX_STRING, stdin);
    char result[256];
    int start;
    start = tokenise(buffer, 0, result);

    while ( start != -1 ) {
        printf("%s\n", result);
        start = tokenise(buffer, start, result);
    }
}

2 个答案:

答案 0 :(得分:4)

在您的函数tokenise -

if(str[start] == "/o"){

你比较的"/o"是什么?它应该是'\0'

if(str[start] == '\0'){

else中,你的函数不会return任何东西,因此,在这种情况下,UB。

你的函数没有任何循环或使用递归迭代数组,因此,你的逻辑似乎没有实现任何接近。

答案 1 :(得分:3)

您的代码存在许多问题:

else {
    result = str[start];
}

没有返回值。这是未定义的行为。

str[start] == '\o'

这是不正确的,因为您想与EOS空终止字符进行比较 这样做:

str[start] == '\0'

最后,如果您希望令牌函数写入result,则需要将指针传递给result,而不是result的值。

ps:除了语义错误之外,你的功能没有像你想要的那样。查看循环及其实现。