2015-10-14 36 views
-7

我是C編程的新手,我知道有關於如何將字符串拆分爲單詞的其他解釋,但沒有一個與我的程序類似。我很難找到我的程序中的錯誤:Tokenise在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); 
    } 
} 
+5

您是否有真正的問題? –

+1

請在將來使用正確的縮進;它會讓你的生活變得更加輕鬆,人們更有可能回答你的問題。這次我已經爲你修好了。此外,此代碼不能編譯。 – szczurcio

+0

是的,我的程序不會工作,我不知道爲什麼 – bike3

回答

4

在你的函數tokenise -

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

什麼"/o"你比?它應該是'\0'

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

而且在else你的功能不return什麼,因此,在這種情況下UB。

您的函數沒有任何循環或使用遞歸遍歷數組,因此,您的邏輯似乎沒有實現任何接近。

+0

這不是這個代碼中最大的問題,不能用'=='比較'char'和'const char *',或者用'='賦值。 – szczurcio

+0

@szczurcio這就是它的要點。他應該與空字符比較。由於OP的邏輯被破壞,它沒有任何意義。 – ameyCU

+0

啊是的,沒有注意到單引號,你是對的。 – szczurcio

3

你有很多問題,你的代碼:

else { 
    result = str[start]; 
} 

無返回值。這是未定義的行爲。

str[start] == '\o' 

那是不正確的,你要比較的EOS空終止字符 而是執行此操作:

str[start] == '\0' 

最後,如果你希望你的tokenise函數寫成result,你需要通過一個指向result的指針,而不是result的值。

ps:除了語義錯誤之外,你的函數並沒有類似你想要的東西。研究循環及其實現。

+0

'\ 0'不是EOF,而是EOS。 – sbi