Можно ли писать с заданного c начального индекса в C? - PullRequest
1 голос
/ 14 февраля 2020

Например,

    char ch[50] = "ABCDEFGH";
    FILE *fp;
    fp = fopen("test.txt","w");
    fwrite(ch,1,6,fp);

этот код записывает "ABCDEF" в файл. Но мне нужно написать "BCDEFG" в файл. Будет прекрасно, если это можно сделать без подстроки.

Ответы [ 2 ]

1 голос
/ 14 февраля 2020

Чтобы записать BCDEFG из той же строки, просто передайте указатель на второй байт массива ch в fwrite:

char ch[50] = "ABCDEFGH";
FILE *fp = fopen("test.txt", "w");
if (fp != NULL) {
    fwrite(ch + 1, 1, 6, fp);
    ...
}

Обратите внимание, что вы также можете использовать строковый литерал, который является константным массивом символов напрямую:

FILE *fp = fopen("test.txt", "w");
if (fp != NULL) {
    fwrite("ABCDEFGH" + 1, 1, 6, fp);
    ...
}

"ABCDEFGH" + 1 совпадает с &"ABCDEFGH"[1], адресом второго байта строки. Массивы распадаются как указатели на их первый элемент при использовании в выражениях, за исключением аргументов sizeof и _Alignof.

1 голос
/ 14 февраля 2020

Помните, в C строки - это просто указатели на их начальный символ. Просто сделайте ch+1 вместо ch, и он будет делать именно то, что вы хотите.

...