C: сравнение строки с "%. c"? - PullRequest
0 голосов
/ 20 марта 2020

Я пытаюсь сделать что-то хитрое. Я хотел бы открыть файл и проверить, содержит ли файл подстроку: echo %.c. Именно эта подстрока: echo, за которой следует знак процента, затем точка, за которой следует символ c.

Мне просто нужно найти правильный синтаксис для использования strstr.

Мой код:

FILE *search = fopen(file, "r");
if (!search) {
    errx(2, "File not found.");
    exit(2);
}
char line[8193];
bool check = false;
while (fgets(line, sizeof(line), search)) {
    if (strstr(line, "echo %.c")) {
        ck = true;
    }
}
fclose(search);

Это не работает, потому что это зарезервированный синтаксис для printf. Как я могу изменить его, чтобы он работал?

Ответы [ 3 ]

3 голосов
/ 20 марта 2020

printf не имеет к этому никакого отношения. "echo %.c" - идеальная строка для передачи на strstr. Должно быть что-то не так с вашей средой, которая мешает вам запускать эту программу.

Обратите внимание, однако, что программа может не найти строку поиска, если она присутствует в строках длиннее 8192 байтов, перекрывая границу из 8192 байтовых блоков. Весьма маловероятно, но возможно на извращенном тестовом стенде.

Обратите также внимание, что ck = true; является опечаткой: имя переменной check. Это заставляет меня задуматься о том, какие другие различия присутствуют в самом коде. Вы искали "echo *.c"

1 голос
/ 20 марта 2020

Это прототип для strstr:

char *strstr(const char *haystack, const char *needle);

Это использование выглядит прекрасно для меня. Я не знаю, о чем вы говорите, используя «зарезервированный синтаксис для printf», если только это не какое-то неясное неверное предупреждение компилятора. В стандарте C ничего подобного не упоминается.

Если ваш код не компилируется из-за ck = true;, попробуйте изменить его на имя вашей переменной - check = true;.

0 голосов
/ 20 марта 2020

Я проверил, что знак процента работает нормально. Проверьте этот пример: https://onlinegdb.com/ByHR13MI8

#include <stdio.h>
#include <string.h>

int main()
{
    const char *line = "The interest rate is 3%.";
    const char *percentage;
    printf("%s\n", line);
    percentage = strstr(line, "3%");
    if (percentage)
        printf("%s", percentage);
    else
        printf("not found");
    return 0;
}
...