我通常以下列方式使用指针
char *ptr = malloc( sizeof(char) * 100 );
memset( ptr, 0, 100 ) ;
strncpy( ptr, "cat" , 100 - 1 );
但是这一次,而不是使用"cat",我想在十六进制中使用ASCII等效.
cat = 0x63,0x61,0x74,0x00
我试过了
strncpy( ptr, "0x630x61" , 100 - 1 );
但它按预期失败了.
什么是正确的语法?
我还需要放一个0x00吗?让我们忘记一下memset,现在我需要放一个0x00吗?因为在"cat"表示法中,会自动放置null.
问候
当我们谈论解除引用时,是否有必要*使用它?如果我们以其他方式访问指针的引用对象,可以将其视为取消引用指针,如:
char *ptr = "abc" ;
printf( "%c" , *ptr ); // Here pointer is dereferenced.
printf( "%s" , ptr ); // What about this one?
Run Code Online (Sandbox Code Playgroud)
这是我提问的第一部分.
现在,如果printf( "%s" , ptr )是解除引用的一个例子,那么也请回答我的问题的以下部分.
K&R说
"指向void的指针"用于保存任何类型的指针,但不能自行解除引用
因此,
char a = 'c' ;
char *p = &a ;
void *k = &a;
printf( "\n%c\n" , *p );
printf( "\n%c\n" , *k );
Run Code Online (Sandbox Code Playgroud)
不编译,编译器给出错误
在函数'main'中:警告:解除引用'void*'指针错误:无效使用void表达式
但是,如果我们使用
char *a = "c" ;
char *p = a ;
void *k = a; …Run Code Online (Sandbox Code Playgroud) 在下面的代码中,我将一个字符串复制到一个char*str,它是10个字符长,使用strncpy().
现在根据strncpy()手册,"警告:如果src的前n个字节中没有空字节,则放置在dest中的字符串将不会以空值终止."这正是这里发生的事情.
源字符串是26个字符长,我复制了10个字符,因此在str的末尾没有放置空字符.
但是当我打印str的内容时,从0开始直到我得到'\ 0',它表现正常.
为什么?当末尾没有'\ 0'时,为什么循环停在正确的位置?
我的理解是它应该给出"分段错误",或者至少它不应该停在那里并继续打印一些垃圾值.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define SIZE 10
int main()
{
char *str ;
str = malloc( sizeof( char ) * SIZE );
if( str == NULL )
exit( 1 );
memset( str, 0, sizeof( char ) * SIZE );
strncpy( str, "abcdefghijklmnopqrstuvwxyz", sizeof( char ) * SIZE );
unsigned int index;
for( index = 0; str[ index ] != '\0' ; index++ ) {
printf( "str[ …Run Code Online (Sandbox Code Playgroud) 在IB内部,在View Effects Inspector中,有一个选项可以设置核心动画层.如果我设置它做什么?

它等同于setWantsLayer:YES?
如果是这样,那么根据Apple文档 setWantsLayer可以在之前或之后调用setLayer:.
The order that setWantsLayer: and setLayer: are called is important, it makes the distinction between a layer-backed view and a layer-hosting view.
如果我从IB设置CALayer,它会是哪个顺序?
Typescript 泛型可用于扩展接口。
interface Sample1<P> {
prop1: P;
}
interface Sample2<P> extends Sample1<P> {
prop2: string;
}
Run Code Online (Sandbox Code Playgroud)
但是当我尝试创建一个使用通用接口的功能组件时,打字稿会抛出错误。
const SampleSFC: React.SFC<Sample2<P>> = () => <div />;
Run Code Online (Sandbox Code Playgroud)
错误 TS2304:找不到名称“P”。
如果我P用已知类型替换,string错误就会消失。
const SampleSFC: React.SFC<Sample2<string>> = () => <div />;
Run Code Online (Sandbox Code Playgroud)
而不是硬编码类型的P,即完全杀死仿制药的目的,我想启用的用户SampleSFC以类型的集合P。
我怎样才能做到这一点?如果这是不可能的,那么我应该遵循什么样的替代设计,让我拥有带有通用道具的 SFC。
我已经为此设置了Git的寻呼机选项
[pager]
log = diff-highlight
Run Code Online (Sandbox Code Playgroud)
我diff-highlight从Git的存储库3dbfe2b8下载了脚本并将其放在我的~/bin文件夹中。
$ where git
C:\Program Files\Git\cmd\git.exe
$ where diff-highlight
C:\Users\andy\bin\diff-highlight
Run Code Online (Sandbox Code Playgroud)
运行会git log导致以下错误:
$ git log
Can't open diff-highlight: No such file or directory at C:\Users\andy\bin\diff-highlight line 36.
Segmentation fault
Run Code Online (Sandbox Code Playgroud)
另一方面,以下命令可以正常运行,
$ git log -p --color | diff-highlight | less -FRSX
Run Code Online (Sandbox Code Playgroud)
这意味着diff-highlight可以从中获得$PATH,但是Git的配置找不到它。
我的Git版本是2.12.0.windows.1。
我的组件有两个Rect.useEffect钩子
const Example = ({ user }) => {
React.useEffect(() => {
autorun(() => {
console.log("inside autorun", user.count);
});
});
// Only runs once
React.useEffect(() => {
console.log("Why not me?");
});
return <Observer>{() => <h1>{user.count}</h1>}</Observer>;
};
Run Code Online (Sandbox Code Playgroud)
我使用mobx. 它被正确地重新渲染。但是"Why not me?"只打印一次。
根据官方文档
默认情况下,效果在每次完成渲染后运行
这意味着console.log("Why not me?");也应该在每次user更新prop 时运行。但事实并非如此。控制台输出是这样的

这种明显的不一致背后的原因是什么?
我的完整代码可以在这里查看
据我所知,十六进制数字可以放入字符串使用\x.例如0x41 0x42可以放在字符串中"\x41\x42".
char * ptr = "\x41\x42" ;
printf( "%s\n" , ptr ) // AB
Run Code Online (Sandbox Code Playgroud)
\x被丢弃并被41编译器视为十六进制.
但是如果我通过命令行参数将它传递给我的程序,它就不起作用.
// test.c
main( int argc , char * argv[] )
{
printf( "%s\n" , argv[1] ) ;
}
Run Code Online (Sandbox Code Playgroud)
$ gcc -o prog test.c
$ ./prog"\ x41\x42"
\x41\x42
$ .prog\x41\x42
\x41\x42
AB在实例中我的期望是什么1.
为什么会这样?为什么这种表示方法在命令行参数的情况下不起作用?我们确切知道的
值argv[1]是一个十六进制字符串如何可以转换为十六进制数字(没有解析,就像在第一个例子中所做的那样)?
谢谢你的时间.
我在两个网站上看到了以下CSS规则
/* First example */
background: #F8F8F8 url('/images/noise.png?1333540701') top left;
/* Second example from a different site */
background: #F8F8F8 url('/images/noise.png?1326131369') top left;
Run Code Online (Sandbox Code Playgroud)
*.png?randomNumberspng图像路径后的含义是什么?他们在这里的目的是什么?
第一个来自bastsov,另一个来自Matt Gemmell.两者都使用Octopress框架.
编辑 并非两个规则都在同一站点上使用.每条规则都来自不同的网站.
此外,无论何时noise.png提到,它们似乎在任何地方使用相同的数字.例如,
/* rule for navigation bar */
background: url('/images/noise.png?1333540701'),linear-gradient(#E0E0E0,#CCC,#B0B0B0)
/* rule for #main */
background: #F2F2F2 url('/images/noise.png?1333540701') top left;
Run Code Online (Sandbox Code Playgroud)
我在Matt Gemmell的网站上观察到相同的模式,但数字不同.
我偶然发现的是了解如何使用 Material-UI 选项卡。我找到了很多帖子,但每个帖子都针对不同版本的 Material-UI,并且每个帖子都给出了完全不同的实现方式。
我创建的 Web 应用程序是一个分析仪表板。我在页面上有 3 个部分。
在主体部分,我想要一个选项卡组件和仪表板组件。选择不同的选项卡将显示不同的仪表板组件。
我从默认的 Tabs 组件开始,它没有正确显示,然后我读到我需要使用 React Router 来完成它,但这取决于我使用的路由器版本。
可能是我的 SPA 理解也缺乏为什么我在使用 Tabs 时应该涉及路由器。
我的设置:最新的 React 16.x 最新的 React -router 4.x 最新的 Material-UI 1.0.3 也使用 Redux
用0和1组合填充数组的好算法是什么.例如,如果我有三列,则组合将是:(1 1 1)(0 1 1)(1 0 1)(0 0 1)(1 1 0)(0 1 0)(1 0 0)(0 0 0)它总共有8行(我希望我就在这里).那么如何提前确定所需的行数(取决于N个列数),然后如何以编程方式填充数组?任何编程语言都很好(我因为熟悉而标记了C和lisp)这是所需的算法.谢谢
c ×5
reactjs ×3
pointers ×2
string ×2
algorithm ×1
argv ×1
cocoa ×1
css ×1
dereference ×1
git ×1
hex ×1
html ×1
macos ×1
material-ui ×1
mobx-react ×1
pager ×1
png ×1
react-hooks ×1
react-router ×1
typescript ×1
windows ×1
xcode4 ×1