C ++ строки и потоки - очень хорошая идея, но если вы абсолютно не можете их использовать, следующий код может быть полезен. Первая функция записывает два типа double в существующую строку C. Вторая функция считывает два двойных числа из существующей C строки и возвращает их по указателю:
void CoordinatesToString(double lat, double long, char *buffer, size_t len) {
assert(buffer != NULL);
assert(len > 0);
snprintf(buffer, len, "%f, %f", lat, long);
buffer[len - 1] = 0; /* ensure null terminated */
}
int StringToCoordinates(const char *string, double *outLatitude, double *outLongitude) {
assert(string != NULL);
assert(outLatitude != NULL);
assert(outLongitude != NULL);
return (2 == sscanf(string, "%f, %f", outLatitude, outLongitude));
}
Использование:
char buffer[128];
CoordinatesToString(90.0, -33.0, buffer, 128);
double lat, lng;
if (StringToCoordinates(buffer, &lat, &lng)) {
printf("lat: %f long %f\n", lat, lng);
}
НО. C ++ строки предназначены для такого рода использования. Они не страдают от потенциальных проблем переполнения, свойственных массивам char
, и вам не нужно вручную управлять их памятью - они изменяют размер, чтобы соответствовать их содержимому по мере необходимости. Есть ли причина , почему вы хотите избежать std::string
, когда говорите, что с C ++ все в порядке?