2011-11-05 52 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