我刚从这里开始学习C语言.
在我上面链接的部分中,作者想要从函数返回一个数组,他写道:
C不主张将局部变量的地址返回到函数外部,因此您必须将局部变量定义为静态变量.
我理解阻止返回局部变量地址的原因.原因是局部变量在其范围之外是不可用的,因此将其地址置于函数之外可能会在运行时产生错误.
但是我不理解的部分是为什么我们必须定义静态而不是全局的数组?
将本地数组定义为静态只会改变其生命周期,或者它也会改变其范围?
这是我谈到的程序:
#include <stdio.h>
/* function to generate and return random numbers */
int * getRandom( )
{
static int r[10];
int i;
/* set the seed */
srand( (unsigned)time( NULL ) );
for ( i = 0; i < 10; ++i)
{
r[i] = rand();
printf( "r[%d] = %d\n", i, r[i]);
}
return r;
}
/* main function to call above defined function */
int main ()
{ …
Run Code Online (Sandbox Code Playgroud) 我有一张Felica卡.第一个问题是这张卡究竟是什么?它是智能卡还是简单的存储卡?它是一种Java卡,我.cap
可以在里面加载文件或它有其专有的固定内容,我不能加载任何小程序?是GlobalPlatform标准投诉吗?
我在这里读到:
索尼专有的FeliCa是一种类似于ISO/IEC 14443的智能卡技术.FeliCa具有类似于ISO/IEC 7816-4中定义的文件系统.用于访问文件系统的文件系统和命令在JIS X 6319-4 [28]中标准化.此外,FeliCa系统还具有专有的加密和安全功能.
之后我尝试向它发送一些APDU命令.第一步是与读者进行一些配置更改.因为我的阅读器配置为读取ISO14443 A型和B型卡而不是Felica卡.
由于Felica和ISO/IEC 14443卡都使用13.56 MHz频率作为载波,我认为这些类型之间的差异仅在协议层中.我对吗?如果是这样,Felica卡传输协议的名称是什么?(对于ISO/IEC 14443卡,我们有T = 1和T = CL协议).
配置完阅读器后,我尝试向卡发送命令:
Connect successful.
Send: 00 A4 04 00 00
Recv: 6A 81
Time used: 31.000 ms
Send: 00 C0 00 00 00
Recv: 6A 81
Time used: 28.000 ms
Send: 00 CA 00 00 00
Recv: 6A 81
Time used: 35.000 ms
Run Code Online (Sandbox Code Playgroud)
如上所述,我0x6A81
只收到状态字.
我还搜索了很多ACS Reader数据表,一些恩智浦应用笔记以及肯定的JIS X 6319-4标准,以获得此类卡的命令列表.但我发现什么都没有适用.
所以,问题是:
更新: …
我试图了解PostgREST教程的初始步骤。
在提到的教程中,建议创建两个名为web_anon和authenticationator 的不同角色,如下所示:
create role web_anon nologin;
grant usage on schema api to web_anon;
grant select on api.todos to web_anon;
create role authenticator noinherit login password 'mysecretpassword';
grant web_anon to authenticator;
Run Code Online (Sandbox Code Playgroud)
据我所知,PostgREST 服务器接收来自客户端的 Rest API 请求,没有关于用户(角色)的任何信息。而且,据我所知,nologin 角色不能登录数据库。(他们可以发送查询吗?)
所以问题是:
为什么我们需要两个不同的角色?web_anon 的作用是什么,authenticator 的作用是什么?
nologin角色在 postgres 中可以做什么?
当 PostgREST 收到一个 rest API 查询时,它使用哪个用户向数据库发送和执行该查询?
我有一个 javacard,当我重置卡时,卡上的所有小程序都被清除,除了其中一个。它是“卡管理器小程序”,其 AID 为“A0000000030000”。我想知道有没有办法删除这个小程序?!或者它是卡上的强制性的并且没有办法删除它?如果可以删除它,删除它后,我们如何处理卡?(安装另一个小程序等)谢谢。
我把我的java卡的ISD状态设置为SECURED状态.我想知道与OP_READY相比,这种新状态卡丢失的能力是什么?
注意:当我尝试时,我可以在卡上上传并安装新的.cap文件并成功删除它们[在这个新的ISD状态]!
如果有人解释不同状态之间的主要差异,我会感恩的吗?我已经阅读了全球平台规范2.2.2,但不幸的是我有点难以理解!
我写了以下程序:
#include <iostream>
int main()
{
int i =123456789;
float f=i;
int j=f;
std::cout<<"j-i ="<<j-i;
}
Run Code Online (Sandbox Code Playgroud)
据我们所知,浮点数在内存中至少有4个字节的长度.并且123456789
在十进制中等于0x75BCD15
十六进制,这小于4字节.所以我为什么在运行上面的程序时,输出不是0
?
ap1019@sharifvm:~$ ./a.out
j-i = 3
Run Code Online (Sandbox Code Playgroud) 看看这个简单的程序:
#include <iostream>
using namespace std;
int main()
{
unsigned int i=0x3f800000;
float* p=(float*)(&i);
float f=*p;
cout<<f;
}
Run Code Online (Sandbox Code Playgroud)
这是我对该计划的期望:
f
在输出中看到.f
是p
指向的值.p
指向名为变量的地址中的值i
.(即价值i
)i
是 0x3f800000
所以我希望看到0x3f800000
输出,但它会打印出来1
.为什么?
ap1019@sharifvm:~$ ./a.out
1
ap1019@sharifvm:~$
Run Code Online (Sandbox Code Playgroud) 我想将文件的地址分配给名为's'的变量:
>>> s= 'D:/4-Tutorials/Network/CCNA-farsi-shariaty/??? ??? ???? ??? IP ? Subnetting.mp4'
Unsupported characters in input
>>> s= u'D:/4-Tutorials/Network/CCNA-farsi-shariaty/??? ??? ???? ??? IP ? Subnetting.mp4'
Unsupported characters in input
>>> s='D:/4-Tutorials/Network/CCNA-farsi-shariaty/??? ??? ???? ??? IP ? Subnetting.mp4'.decode('utf8')
Unsupported characters in input
>>> s='D:/4-Tutorials/Network/CCNA-farsi-shariaty/??? ??? ???? ??? IP ? Subnetting.mp4'.encode('utf8')
Unsupported characters in input
>>> s='D:/4-Tutorials/Network/CCNA-farsi-shariaty/??? ??? ???? ??? IP ? Subnetting.mp4'.decode('utf-8')
Unsupported characters in input
Run Code Online (Sandbox Code Playgroud)
如您所见,我在输入错误中返回不支持的字符.而这个错误是因为文件名中的阿拉伯语/波斯语字母.
奇怪的是我可以在IDLE中写阿拉伯语/波斯语,我可以有一个包含阿拉伯语/波斯语字母的字符串变量:
>>> s = "????"
>>> s = "??? ??? ???? ???" …
Run Code Online (Sandbox Code Playgroud) 下面,您会看到一个简单的小程序,它返回0x6781
到带有 INS=0x70
或 INS= 的传入 APDU 命令0x71
:
package testPack;
import javacard.framework.*;
public class TestApp extends Applet
{
public static void install(byte[] bArray, short bOffset, byte bLength)
{
new TestApp().register(bArray, (short) (bOffset + 1), bArray[bOffset]);
}
public void process(APDU apdu)
{
if (selectingApplet())
{
return;
}
byte[] buf = apdu.getBuffer();
switch (buf[ISO7816.OFFSET_INS])
{
case (byte)0x70:
ISOException.throwIt((short)0x6781);
break;
case (byte)0x71:
ISOException.throwIt((short)0x6781);
break;
default:
ISOException.throwIt(ISO7816.SW_INS_NOT_SUPPORTED);
}
}
}
Run Code Online (Sandbox Code Playgroud)
问题是,我收到0x6C01
了带有 INS= 的 APDU 命令0x70
:
Send: …
Run Code Online (Sandbox Code Playgroud) 假设我想为平台编译C程序.我知道我必须在编译中指定CPU架构,因为不同CPU架构之间的指令集不同.我也知道我必须指定目标平台操作系统,因为不同操作系统之间的可执行文件结构和系统调用之间存在差异.
Q1:问题是如果我需要指定32位或64位的OS(不是CPU架构)?
换句话说,假设我有两个系统:
编译上述系统的程序有什么不同吗?
Q2:当我添加编译器-m32
的选项时gcc
,这是32
为了什么?它是用于操作系统还是用于CPU架构?
gcc operating-system compilation cpu-architecture 32bit-64bit
javacard ×4
c++ ×2
smartcard ×2
32bit-64bit ×1
applet ×1
arrays ×1
c ×1
compilation ×1
gcc ×1
nfc ×1
pcsc ×1
postgresql ×1
postgrest ×1
python ×1
python-2.7 ×1
python-idle ×1
unicode ×1
utf-8 ×1