2011-11-05 34 views
0

我試圖解析一行,以便每個單詞後面的空白單獨保存爲char到數組中。我試圖在許多方式,這是其中之一...C - tokenise數組字符

char space[] = " "; 
char* token; 
token = strtok(input,space); 
char array[50]; 


while (token !=NULL) { 
    char a; 
    sscanf(token,"%s", &a); 
    array[i] = a; 
    token = strtok(NULL, space); 
    printf("\nTOKEN: %s", a); 
    int++; 
} 
+1

啓用編譯器警告..你想要一個單詞列表嗎?那是char *數組[50]; –

回答

1
char a; 
sscanf(token,"%s", &a); 

這是不對的,你告訴sscanf讀取一個字符串但你給它一個char。一個「單詞」不適合單個char。它真不明白你正在嘗試做的,也許你想是這樣的:

char* array[50]; 

int i = 0; 
for(char* token = strtok(input, " "); token != NULL && i < 50; token = strotok(NULL, " ")) 
{ 
    array[ i ] = token; 
    ++i; 
} 

這將填補array與內input指向各子用空格隔開。原始內容將保留在input,數組只指向它。

+0

是的,沒錯。多麼愚蠢的錯誤,非常感謝! – user1024833

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

typedef char** StringArray; 

StringArray split(const char *str, const char *delimiter){ 
    char *text, *p, *first, **array; 
    int c; 
    StringArray ret; 

    text=strdup(str); 
    if(text==NULL) return NULL; 
    for(c=0,p=text;NULL!=(p=strtok(p, delimiter));p=NULL, c++)//count item 
     if(c==0) first=p; //first token top 

    ret=(StringArray)malloc(sizeof(char*)*(c+1));//+1 for NULL 
    if(ret==NULL){ 
     free(text); 
     return NULL; 
    } 
    strcpy(text, str+(first-text));//skip until top token 
    array=ret; 

    for(p=text;NULL!=(p=strtok(p, delimiter));p=NULL){ 
     *array++=p; 
    } 
    *array=NULL; 
    return ret; 
} 

void free4split(StringArray sa){ 
    char **array=sa; 

    if(sa!=NULL){ 
     free(array[0]);//for text 
     free(sa);  //for array 
    } 
} 

int main(void){ 
    char *str = "The quick brown fox jumps over the lazy dog"; 
    StringArray words; 
    char **wk; 

    words = split(str, " \t\r\n"); 

    for(wk = words; *wk ;wk++){ 
     printf("%s\n", *wk); 
    } 

    free4split(words); 
    return 0; 
} 
/* result 
The 
quick 
brown 
fox 
jumps 
over 
the 
lazy 
dog 
*/ 
+1

是什麼讓你認爲main()返回void?爲什麼你將malloc()作爲返回值?爲什麼包含非​​標準頭文件? – wildplasser

+0

細節不在乎。 – BLUEPIXY

+0

但是_you_可以照顧。 – wildplasser