我是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);
}
}
答案 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:除了语义错误之外,你的功能没有像你想要的那样。查看循环及其实现。