Есть два способа, поместив его внутри componentDidMount, вы можете решить проблему:
1. Привяжите эту область к функции
.bind (this)
twitter.get('statuses/user_timeline', function(error, data) {
this.setState({tweets: data})
}).bind(this);
2. Используйте стрелку жира
=>
twitter.get('statuses/user_timeline', (error, data) => {
this.setState({tweets: data})
});
Это не настолько полезно для printf()
, но для sscanf()
, особенно при парсинге строки в нескольких повторениях может быть очень полезно. fscanf()
и scanf()
автоматически совершенствуют их внутренние указатели объемом входного чтения, но sscanf()
не делает. Например:
char stringToParse[256];
...
char *curPosInString = stringToParse; // start parsing at the beginning
int bytesRead;
while(needsParsing())
{
sscanf(curPosInString, "(format string)%n", ..., &bytesRead); // check the return value here
curPosInString += bytesRead; // Advance read pointer
...
}
Зависит, под чем Вы подразумеваете практичный. Всегда существуют другие способы выполнить его (печать в строковый буфер с s [n] printf и вычислить длину, например).
Однако
int len;
char *thing = "label of unknown length";
char *value = "value value value"
char *value2="second line of value";
printf ("%s other stuff: %n", thing, &len);
printf ("%s\n%*s, value, len, value2);
должен произвести
label of unknown length other stuff: value value value
second line of value
(хотя не протестировано, я не около компилятора C)
, Который примерно практичен как способ выровнять вещи, но я не хотел бы видеть его в коде. Существуют лучшие способы сделать его.
Это довольно тайно. Если необходимо заменить заполнителя в сгенерированной строке позже, Вы могли бы хотеть помнить индекс в середину строки, так, чтобы Вы или не сохраняли исходный printf параметр или проанализировать строку.
Это могло возможно использоваться в качестве быстрого способа получить длины различных подстрок.
#include <stdio.h>
int main(int argc, char* argv[])
{
int col10 = (10 - 1);
int col25 = (25 - 1);
int pos1 = 0;
int pos2 = 0;
printf(" 5 10 15 20 25 30\n");
printf("%s%n%*s%n%*s\n", "fried",
&pos1, col10 - pos1, "green",
&pos2, col25 - pos2, "tomatos");
printf(" ^ ^ ^ ^ ^ ^\n");
printf("%d %d\n", pos1, pos2);
printf("%d %d\n", col10 - pos1, col25 - pos2);
return 0;
}
я пропускаю что-то здесь наверняка. Tomatos слишком далек направо.
Вот что-то от кода VS2005 CRT:
/* if %n is disabled, we skip an arg and print 'n' */
if ( !_get_printf_count_output() )
{
_VALIDATE_RETURN(("'n' format specifier disabled", 0), EINVAL, -1);
break;
}
, который поднимает это:
сопроводительный текст http://www.shiny.co.il/shooshx/printfn.png
для следующей строки:
printf ("%s other stuff: %n", thing, &len);
я предполагаю, что это должно главным образом избежать того, какой @eJames говорит [приблизительно 117]
вы можете позвонить по
int _get_printf_count_output();
, чтобы узнать, включена ли поддержка% n, или использовать
int _set_printf_count_output( int enable );
, чтобы включить или отключить поддержку формата% n.
из MSDN VS2008