2016-11-08 40 views
-5

我有一個文本文件是這樣的:C程序 - 如何獲得strtok()中的第二次出現?

/www/test.php = 24323 

strtok(myfile," = ")只打印第一次出現是/www/test.php,我怎麼能打印第二次出現是24323

新的問題:

char * name; 
char *def_size; 
name = strtok (line," = "); 
def_size = strtok(NULL, " = "); 
stat(name, &st); 
if (st.st_size != def_size) { 
    printf("File size doesn't match\n"); 
} 

當我編譯,我得到:

test.c的:在函數 '主':test.c的:23:24:警告: 指針和整數 之間的比較,如果(st.st_size!= def_size){ ^〜

我該如何解決這個問題?對不起,我對C編程非常陌生

+2

那麼該函數的文檔中你不明白的代碼?你的代碼在哪裏?你有哪些具體**問題? – Olaf

+1

借用@奧拉夫說。這在所有常用的C標準庫資源(和'man strtok(3)')下都有很好的文檔記錄。 – Jules

回答

0

您將strtok的第一個參數更改爲NULL。它應該是這樣的:

strtok(NULL, " = "); 

當然,你仍然要保留您的來電strtok(myfile, " = ");NULL任何後續調用strtok作爲第一個參數將繼續從先前指定的字符串的最後一個點。

例子:

printf("%s", strtok(myfile, " = ");  // prints "/www/test.php" 
printf("%s", strtok(NULL, " = ");  // prints "24323" 

您也可以不是字符串比較爲整數。您需要使用atoi像這樣:

if (st.st_size != atoi(def_size) { 
    printf("File size doesn't match\n"); 
} 
+0

你能再次看看我的問題嗎?我有一個新問題 – hillz

+0

順便說一句,爲什麼這個值得讚賞? –

+0

@hillz我做了,並更新了我的答案。 –

-1

你必須使用循環來打印每一個部分。 下面給出了打印所有令牌

#include <string.h> 
#include <stdio.h> 

int main() 
{ 
    char str[80] = "/www/test.php = 24323"; 
    const char s[2] = "="; 
    char *token; 

    /* get the first token */ 
    token = strtok(str, s); 

    /* walk through other tokens */ 
    while(token != NULL) 
    { 
     printf(" %s\n", token); 

     token = strtok(NULL, s); 
    } 

    return(0); 
} 
+0

你能再次看看我的問題嗎?我遇到了新問題 – hillz

+1

@hillz:我們沒有輔導或交互式調試服務。請閱讀文檔並嘗試理解它。如果你不明白,首先要求自己做一些研究。遵循網站規則。 – Olaf

相關問題