Joachim Pileborgの答えを詳しく説明pal
すると、キャラクターへのポインターです。*pal
これはchar
、pal が指す文字を表す整数値です。charは、アドレス可能な最小の整数型です。
strtol を使用する場合は、型が一致するようcoords
に toを変更するのが最も賢明です。long
利点は、この種の解析では strtok がかなりお粗末であり、完全に破棄できることです。
typedef struct {
long x;
long y;
} Coord;
/* returns the number of coordinates read. */
size_t read_coordinates(char *str, Coord destination[], size_t capacity);
int main(void) {
#define EXERCISE_CAPACITY 1000
Coord exercise[EXERCISE_CAPACITY];
size_t count = read_coordinates("1 2 3 4 5 6", exercise, EXERCISE_CAPACITY);
}
size_t read_coordinates(char *str, Coord destination[], size_t capacity) {
size_t x;
for (x = 0; x < capacity; x++) {
char *endptr = NULL;
destination[x].x=strtol(str, &endptr, 10);
if (endptr - str == 0) {
// Stop when strtol says it can't process any more...
break;
}
str = endptr + 1;
destination[x].y=strtol(str, &endptr, 10);
if (endptr - str == 0) { break; }
str = endptr + 1;
}
return x;
}
座標の型として使用する必要がある場合はint
、次のように sscanf を使用するのが賢明です。
typedef struct {
int x;
int y;
} Coord;
/* returns the number of coordinates read. */
size_t read_coordinates(char *str, Coord destination[], size_t capacity);
int main(void) {
#define EXERCISE_CAPACITY 1000
Coord exercise[EXERCISE_CAPACITY];
size_t count = read_coordinates("1 2 3 4 5 6", exercise, EXERCISE_CAPACITY);
}
size_t read_coordinates(char *str, Coord destination[], size_t capacity) {
size_t x;
for (x = 0; x < capacity; x++) {
int n;
if (sscanf(str, "%d %d%n", &destination[x].x, &destination[x].y, &n) != 2) {
// Stop when sscanf says it can't process any more...
break;
}
str += n;
}
return x;
}