不知道這是否會幫助,這是一個簡單的標記生成器,我使用
#include <stdlib.h>
#include <string.h>
int token(char* start, char* delim, char** tok, char** nextpos, char* sdelim, char* edelim) {
// Find beginning:
int len = 0;
char *scanner;
int dictionary[8];
int ptr;
for(ptr = 0; ptr < 8; ptr++) {
dictionary[ptr] = 0;
}
for(; *delim; delim++) {
dictionary[*delim/32] |= 1 << *delim % 32;
}
if(sdelim) {
*sdelim = 0;
}
for(; *start; start++) {
if(!(dictionary[*start/32] & 1 << *start % 32)) {
break;
}
if(sdelim) {
*sdelim = *start;
}
}
if(*start == 0) {
if(nextpos != NULL) {
*nextpos = start;
}
*tok = NULL;
return 0;
}
for(scanner = start; *scanner; scanner++) {
if(dictionary[*scanner/32] & 1 << *scanner % 32) {
break;
}
len++;
}
if(edelim) {
*edelim = *scanner;
}
if(nextpos != NULL) {
*nextpos = scanner;
}
*tok = (char*)malloc(sizeof(char) * (len + 1));
if(*tok == NULL) {
return 0;
}
memcpy(*tok, start, len);
*(*tok + len) = 0;
return len + 1;
}
的參數是:
- 字符*開始,(指向字符串的指針)
- char * delim,(指向分隔符的指針u sed的打破了字符串)
- 字符** TOK(使用&)到一個char *變量將容納托克
- 炭基準** nextpos,(使用&)到一個char *變量的引用那將會持有最後一個令牌之後的位置。
- 字符* sdelim,(使用&)爲char變量的引用將保存-start定界符
- 字符* edelim,參考(使用&)爲char varaible的值,將持有的值結束分隔符
最後三個是可選的。
傳中,起始地址,該分隔符是」,並通過引用一個char *,以保持實際的中間串。
結果是一個新分配的字符串,所以你必須釋放它。
int get_string(FILE *in, char *temp)
{
char *token = NULL;
/* Get the first line */
fgets(temp, STRING_SIZE, in);
printf("temp before [ %s ]\n", temp);
/* Find the second quote */
int length = token(temp, "\"", &token, NULL, NULL, NULL)
// DO STUFF WITH THE TOKEN
printf("temp after [ %s ]\n", token);
// DO STUFF WITH THE TOKEN
// FREE IT!!!
free(token);
return TRUE;
}
的分詞器是一個多用途的工具,可以在一個垃圾噸的地方使用,這是一個非常小的例子。
或者,OP可以用'的memmove(溫度,溫度+ 1,strlen的(溫度+ 1)+ 1);'移動緩衝區內的字符串(而不是'temp ++;') – caf 2010-07-30 12:14:30
@caf:這就是我所說的「應該將字符移動到緩衝區中」。 – Vlad 2010-07-30 12:16:12
是的,我沒有針對你的評論,更多的是針對OP。 – caf 2010-07-30 12:21:24