В чем смысл спецификатора формата% * c в c / c ++? [Дубликат]

Этот запрос должен работать:

$result = mysql_query("SELECT * FROM Users WHERE UserName LIKE '%$username%'");
while($row = mysql_fetch_array($result))
{
    echo $row['FirstName'];
}

Проблема заключается в одинарных кавычках, поэтому ваш запрос завершается с ошибкой и возвращает FALSE, и цикл WHILE не может выполняться. Использование% позволяет сопоставлять любые результаты, содержащие вашу строку (например, SomeText- $ username-SomeText).

Это просто ответ на ваш вопрос, вы должны реализовать материал, упомянутый в других сообщениях: обработка ошибок , используйте escape-строки (пользователи могут вводить что-либо в поле, и вы ДОЛЖНЫ убедиться, что это не произвольный код), используйте PDO вместо mysql_connect, который теперь лишен.

7
задан Cool Guy 21 October 2015 в 10:05
поделиться

3 ответа

printf("%*c%*c", 4, ' ', 5, ' '); печатает пробел в поле размера 4, за которым следует пробел в поле размера 5. Так что всего 9 символов.

В вашем опубликованном коде функция возвращает результат из printf, который дает количество печатных символов, поэтому 9. В основном вы печатаете этот номер 9.

5
ответ дан Jean-Baptiste Yunès 4 September 2018 в 07:31
поделиться

Все так, как ожидалось. Согласно руководству manual

(необязательно). за которым следует целое число или *, или ни одно из них не указывает точность преобразования. В случае, когда * используется, точность задается дополнительным аргументом типа int. Если значение этого аргумента отрицательное, оно игнорируется. Если ни число, ни * не используются, точность принимается равной нулю. См. Таблицу ниже для точных эффектов точности.

Возвращаемое значение 1-2) Количество символов, записанных в случае успешного или отрицательного значения, если произошла ошибка.

ваш случай:

int add(int x, int y)
{
    return printf("%*c%*c",x,' ', y,' ');
    //              ^ x is for the first *, y for the second *
}

В результате записано x + y количество пробелов (включая точность), которое является возвращаемым значением.

1
ответ дан luoluo 4 September 2018 в 07:31
поделиться

printf возвращает количество напечатанных символов.

printf("%*c", N, C); печатает N-1 пробелы, за которыми следует символ C.

В общем случае printf печатает N - length_of_text ] (если это число > 0, нулевые пробелы в противном случае), за которым следует текст. То же самое относится и к номерам.

, поэтому

return printf("%*c%*c", x, ' ', y, ' ');

печатает пробел с префиксом x минус length_of_space других пробелов (x-1), затем делает то же самое для y. Это делает 4+5 пробелы в вашем случае. Затем printf возвращает общее количество напечатанных символов. 9.

printf("%d",add(4,5));

Это printf печатает целое число, возвращаемое функцией add(), 9.

По умолчанию , printf выравнивается по правому краю (пробелы перед текстом). Чтобы [ []

  • [
  • ] [0], [0], [
  • ],
  • , добавьте - перед * , например %-*s, или
  • работает статическая версия, например. %-12s, %-6d
7
ответ дан Ring Ø 4 September 2018 в 07:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: