我试图仅过滤来自给定缓冲区(1200行)的那些行,其第一个令牌与特定字符串匹配。这里的行中的字符串用" @"分隔。符号和行由" \ n"。
分隔因此,首先我使用strtok()分割字符串并将标记存储在指针数组中。 然后我用了比较
if(token[0]=="abc.com") print("%s",token[i])
这里只打印所有以abc.com开头的行,只有第一个令牌。
那么,任何人都可以帮助我在匹配第一个令牌后如何打印原始行。
int len_of_buff;
int n;
//char tokens[1024];
int ret_code = 1;
n=0;
len_of_buff = strlen((char *)my_buffer);
//char *tokens[len_of_buff];
for(i=n;i<len_of_buff; i++) {
char tokens[1024];
tokens[i] = strtok ((char *)my_buffer,"@\n");
//if (my_buffer[i] == '\n') my_buffer[i]='\0';
ret_code=strcmp(tokens[0], "abc.com");
if (ret_code==0) {
printf("\n");
fprintf(stdout, "%s \n ",(char *)my_buffer+n);
// fprintf(stdout, "******The buffer is: %d bytes\n",len_of_buff);
n = i+1;
break; } }
答案 0 :(得分:1)
if(token[0]=="abc.com")
简单地比较两个指针(一个指向常量字符串,另一个指向输入行中的某个位置。这将总是返回FALSE。
if (strcmp (token[0], "abc.com") == 0)
如果token [0]是指向第一个令牌的char指针,那么会做正确的事。
如果要打印整个原始行,则需要将其保存到某处 - strtok在解析过程中销毁原始字符串。
答案 1 :(得分:0)
现在我按照以下方式做了它并且工作正常。
char buffer_copy[1000];
strcpy( buffer_copy, buffer );
char * tokens[1000];
size_t token_count = 0;
char * ptr = tokens[token_count] = buffer_copy;
while( *ptr )
if( ( *ptr == '@' ) || ( *ptr == '\n' ) )
*ptr++ = '\0', tokens[++token_count] = ptr;
else
++ptr;
size_t index;
for( index = 0; index < token_count; ++index )
if( !strcmp( tokens[index], "member" ) )
printf( "%d: %s | %s", index, tokens[index], buffer );