2014-04-20 59 views
0

我再次編碼現在文件分割成一個線和一個字符數組的每一行,所以我嘗試下面的代碼:的strtok和指向數組

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

int main (void) 
{ 
    int i=0; 
    char value[3][1024]; 
    char (*p)[1024] = value; 

    char *p1; 
    char *array[4]; 

    char line[1024]; 
    FILE *fp=fopen("data1.txt", "r"); 
    if(fp==NULL){ 
     printf("\nThe file does not exist\n"); 
    } 
    else{ 
     while(fgets (line, sizeof(line), fp) != NULL ) 
     { 
      strcpy(p[i],line); 
      printf ("%s",p[i]); 
      printf("\n"); 
      i++;  
     }  
    } 
    i = 0; 
    p1 = strtok(value[i]," "); 
    while (p1 != NULL) 
    { 
     array[i++] = p1; 
     p1 = strtok (NULL, " "); 
    } 
    printf("%s\t\n", array[0]); 
} 

當我得到的輸出似乎一切很好,我的文件(存儲數字的char數組)的行被複制到p [i]。如果我打印p [0],p [1],我會得到完整的一行。後來我嘗試將該行分割成長度爲4(3減去'\ 0')的字符數組。 strtok必須使用值之間的製表符分隔值[i]。據此,如果我打印數組[0]我必須只獲得我的字符數組的第一個值,但我再次獲得完整的行o.O.

我也許我沒有'\ 0'在p [i]或者我正在使用strtok錯誤。任何想法的傢伙?現在我正在嘗試打印每個值,以瞭解我存儲了哪些值,但一切似乎都正常。我會轉到GDB,也許我會發現我的價值觀有點奇怪。

輸入文件由標籤空格分隔。

55  2  3  44 
1000 33  4  5 
+0

輸入文件是什麼樣的? – BLUEPIXY

+0

oh pixy你已經醒了? :),我得到:55-2-3-44 \ n1000-33-4-5 \ n並嘗試分割數組和打印數組[0]我得到:1000-33-4-5所以它不是拆分數組。我必須得到1000.如果我改變i = 1,我必須得到55,但我得到了整條線。 – mrmurmanks

+0

它沒有被空格分開。 – BLUEPIXY

回答

0

非常感謝PIXY,我能夠弄清楚代碼中發生了什麼。

1st:代碼必須在ASCII上。 第二:我真的很愚蠢,因爲令牌我需要的是「\ t」的不是空白空間「」,所以代碼必須

p1 = strtok(value[i],"\t"); 
    while (p1 != NULL) 
    { 
     array[i++] = p1; 
     p1 = strtok (NULL, "\t"); 
    } 
    printf("%s\t\n", array[0]); 

BLUEPIXY能夠運行的代碼感謝idea.com,因爲他用一個簡單的白色空格分隔的字符,我用的是標籤空間(我需要改進我給我的問題的數據,我的錯誤傢伙)。在歐洲,亞洲和美國度過愉快的一天,謝謝你們:)