我正在尝试从较大的字符串中查找信息的不同子字符串,在该字符串中,信息用":"
例如:用户名:id:密码:信息
如何在C中使用strstr
函数将此字符串循环以将信息提取到不同的子字符串中?
到目前为止,我已经尝试过类似的事情:
char string[] = "username:id:password:info"
char *endptr;
if((endptr = strstr(string, ":")) != NULL) {
char *result = malloc(endptr - string + 1);
if(result != NULL) {
memcpy(result, string, (endptr - string));
result[endptr - string] = '\0';
username = strdup(result);
free(result);
}
}
我想使此循环可提取所有子字符串。
答案 0 :(得分:0)
从较大的字符串中查找信息的不同子字符串,该较大的字符串中的信息用“:”分隔。
如何在C中使用strstr
函数将此字符串循环以将信息提取到不同的子字符串中?
strstr()
并不是执行此任务的最佳工具,但可用于查找":"
。
相反,我建议strcspn(string, "\n")
,因为目标是找到下一个":"
或 空字符。
OP'c代码接近形成循环,但还需要处理最后一个令牌,该令牌缺少最后一个':'
。
void parse_colon(const char *string) {
while (*string) { // loop until at the end
size_t len;
const char *endptr = strstr(string, ":"); // much like OP's code
if (endptr) {
len = (size_t) (endptr - string); // much like OP's code
endptr++;
} else {
len = strlen(string);
endptr = string + len;
}
char *result = malloc(len + 1);
if (result) {
memcpy(result, string, len);
result[len] = '\0';
puts(result);
free(result);
}
string = endptr;
}
}
int main(void) {
parse_colon("username:id:password:info");
}
输出
username
id
password
info