我正在尝试解析一行,以便将空白后的每个单词作为char分别保存到数组中。我试过多种方式,这是其中之一......
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++;
}
答案 0 :(得分: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
上,数组仅指向它。
答案 1 :(得分: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
*/