古い値と新しい値の文字数が同じ場合 (あなたのケース)、それらを上書きすることができます:
FILE* fp = fopen("x.txt", "r+"); // note: r+, not rw
char row[256];
char* string = "\"jacket\":"; // note: contains punctuation
char* newvalue = "42\n"; // note: contains a line break
while (!feof(fp)) // note: feof is bad style
{
long pos = ftell(fp);
fgets(row, 256, fp); // note: might add error handling
// check if there is the "jacket": in this row,
if (strncmp(row, string, strlen(string)) == 0)
{
// check that the old length is exactly the same as the new length
// note: assumes the row contains a line-break \n
if (strlen(row) == strlen(string) + strlen(newvalue))
{
// then edit the row
fseek(fp, (long)(pos + strlen(string)), SEEK_SET);
fputs(newvalue, fp);
fseek(fp, (long)(pos + strlen(string) + strlen(newvalue)), SEEK_SET);
}
else
{
printf("Too bad, cannot change value");
}
}
}
fclose(fp);
ファイル形式を変更してパディングを含めることができます。次に例を示します。
"shoes":12____
"pants":33____
"jacket":26____
"glasses":16____
"t-shirt":182___
ここで_
はスペース文字を視覚化します。このファイル形式は、最大 999999 個のアイテムをサポートします。このような変更を行う場合は、上記のコードを変更して、スペースの数などを確認および調整する必要があります。