코드에서 배열 string
에 제한을 줄 필요가 없습니다. 첫 번째 공간 인 경우, 다음 복사를 중지 NULL
가 반환되지 않았 음을, 별도의 배열 또는 포인터에 모든 내용을 복사 할 수 있습니다 strstr()
와 "ret"
의 값을 찾은 후
const char string[] = "ret=\"y\" err=\"000\"";
을하고, 검사 : 당신은 간단하게 사용할 수 있습니다 녹이다. 이렇게하면 ret = "y"
이 복사됩니다. 공백이 발견되면 \0
종결 자로 배열 또는 포인터를 종료하십시오.
그런 다음 strchr(3)
을 사용하여 '='
문자의 위치를 찾은 다음 해당 문자가있는 경우 그 값을 다른 변수에 할당 할 수 있습니다. 이 변수는 등호 뒤에 값을 포함합니다.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void) {
const char string[] = "ret=\"y\" err=\"000\"";
const char *key = "ret";
const char equals = '=', space = ' ', quote = '"';
char *start, *copy, *next, *value;
size_t i;
start = strstr(string, key);
if (start != NULL) {
copy = strdup(start);
if (copy == NULL) {
fprintf(stderr, "Failed to copy contents of string\n");
exit(EXIT_FAILURE);
}
for (i = 0; start[i] != space && start[i] != '\0'; i++) {
copy[i] = start[i];
}
copy[i] = '\0';
next = strchr(copy, equals);
if (next != NULL) {
next++;
if (*next == quote) {
next++;
next[strlen(next)-1] = '\0';
value = next;
}
}
printf("%s = %s\n", key, value);
free(copy);
}
return 0;
}
하면 strchr() strtok를() : 여기
는 일례이다? –'printf ("% c", stringg [0]);'를 사용하십시오. 무슨 문제가있는 것 같습니까? – Lundin
제안 : "하나의 가치를 얻는 방법"에 초점을 맞추는 대신 유용한 데이터 구조로이를 파싱 할 수있는 방법에 대해 생각할 수 있습니다. –