Как обычно, скансет, вероятно, ваш лучший ответ:
sscanf(lineread, "%*[^\"]\"%[^\"]\"%*[^\"]\"%[^\"]\"", name, value);
Конечно, для реального кода вы также хотите ограничить длину конверсий:
#include <stdio.h>
int main() {
char lineread[] = "<param name=\"Distance\" value=\"1000Km\" />";
char name[256], value[256];
sscanf(lineread, "%*[^\"]\"%255[^\"]\"%*[^\"]\"%255[^\"]\"", name, value);
printf("%s\t%s", name, value);
return 0;
}
Edti: Кстати, sscanf возвращает количество успешных преобразований, поэтому в исходном коде вы, вероятно, хотели бы сравнить с 2 вместо 1.
Edit2: это много: %*[^\"]\"
означает «читать и игнорировать символы, отличные от кавычек», затем читать и пропускать кавычки. Следующий %255[^\"]\"
означает «прочитать до 255 символов, отличных от знака кавычки, затем прочитать и пропустить знак кавычки. Затем весь шаблон повторяется для чтения второй строки.