コードでは、配列string
に制限を与える必要はありません。 strstr()
で"ret"
の値を見つけた後
const char string[] = "ret=\"y\" err=\"000\"";
、およびNULL
が返されていなかった、あなたは別の配列やポインタにすべての内容をコピーすることができることを確認し、最初のスペースがあるときにコピーを停止する:あなたは、単に使用することができます見つかりました。これにより、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
提案として:「その1つの価値を得る方法」に焦点を当てる代わりに、これを有用なデータ構造にどのように解析できるかを考えることができます。 –