小编Kei*_*son的帖子

在Ada中自定义类型转换

我有一个由某种类型索引的某种对象的数组index:

type index is new Integer range 1..50;
type table is new Array(index) of expression;
Run Code Online (Sandbox Code Playgroud)

现在,我需要访问其中一个表达式,具体取决于键盘输入的用户.为此我做了以下事情:

c: Character;
get(c);

s: String := " ";
s(1) := c;
Run Code Online (Sandbox Code Playgroud)

最后我可以将角色转换为Integer:

i: Integer;
i := Integer'Value(s);
Run Code Online (Sandbox Code Playgroud)

现在,我有用户想要访问的值的位置,但Ada不允许您访问table,因为它是由索引编制index而不是Integer,它们是不同的类型.

根据用户的输入访问表达式的最佳解决方案是什么?

indexing types integer ada type-conversion

0
推荐指数
1
解决办法
615
查看次数

检查'C'中的NULL字符时出现奇怪的行为

为了澄清一点,我写了两个小测试程序,如下所示.

#include <stdio.h>                                                                                                                                                                       

int main(int argc, char *argv[])
{
    char *p = "ab";
    p++;
    p++;

    if (*p)
        printf("p is not NULL \n");
    else
        printf("ps is NULL \n");

    return 0;

 }
Run Code Online (Sandbox Code Playgroud)

上面的程序初始化p字符串文字的char指针ab.我将指针递增两次,然后if循环检查是否p指向非NULL字符.这样可以正常工作并提供以下输出.

ps is NULL 
Run Code Online (Sandbox Code Playgroud)
#include <stdio.h>


int main(int argc, char *argv[])
{
    char *p = '\0';                                                                                                                                                                      

    if (*p)
        printf("p is not NULL \n");
    else
        printf("ps is NULL \n");

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

上面的程序将char指针初始化p为NULL字符\0.如果我编译并运行程序,我会得到分段错误.有人解释一下吗?

两种情况的唯一区别是NULL字符位于位置0和位置.2否则程序看起来与我相同.

c null pointers

0
推荐指数
1
解决办法
138
查看次数

Ada.Strings.Fixed.Index_Non_Blank的行为

我在想,根据它的名字,逻辑上,这个函数将返回第一个字符的索引,而不是空格,也就是说,不是空格或制表.

不过,测试时它的一些字符串,并在它的实现寻找(文件时,A-strsea.adbGNAT 4.7.4),我意识到,实际上这个函数返回的第一个字符的索引不是一个普通的空间(ASCII 32).在我看来,这与它的名字可以设想的不一致.

那么,我在哪里可以找到此函数的预期行为(除了查看代码)?实际上,在AARMfor中Ada 2012,我只找到了原型,没有任何语义信息.

string ada

0
推荐指数
1
解决办法
181
查看次数

bash:意外令牌附近的语法错误`;&'

我正在尝试在服务器上设置git并遵循此操作.我收到这个命令的错误

mkdir .ssh &amp;&amp; chmod 700 .ssh`
Run Code Online (Sandbox Code Playgroud)

错误说:

bash: syntax error near unexpected token `;&'
Run Code Online (Sandbox Code Playgroud)

任何的想法?

linux git bash shell

0
推荐指数
1
解决办法
2492
查看次数

Ada中的多线程

我正在学习Ada,我在理解并发模型方面遇到了一些问题.以下测试应用程序应创建3个并行运行的任务,并简单地打印一系列数字.如果我没有使用任务,entry那么一切都很好,但如果我使用条目,则程序调用块并且根本不会发生并发.

我知道有可能实现互斥和同步执行,但我无法理解如何分离任务,甚至可能创建其中的几个.

q_multithreading.ads:

package Q_MULTITHREADING is

  task type TASK_LOOP is
  end TASK_LOOP;

  type TASK_LOOP_ACCESS is access TASK_LOOP;

  --===========================================================================

  task type TASK_ENTRY_LOOP is
    entry P_ITERATE(to : in Integer);
  end TASK_ENTRY_LOOP;

  type TASK_ENTRY_LOOP_ACCESS is access TASK_ENTRY_LOOP;

  --===========================================================================

  procedure P_EXECUTE_NO_ENTRY;

  procedure P_EXECUTE_ENTRY(to : in Integer);

end Q_MULTITHREADING;
Run Code Online (Sandbox Code Playgroud)

q_multithreading.adb:

with Ada.Text_IO;

package body Q_MULTITHREADING is

  V_ID_COUNTER : Integer := 1;

  --===========================================================================

  task body TASK_LOOP is

    V_ID : Integer := -1;

  begin

    V_ID := V_ID_COUNTER;
    V_ID_COUNTER := V_ID_COUNTER + 1;

    for i in …
Run Code Online (Sandbox Code Playgroud)

multithreading ada task

0
推荐指数
1
解决办法
549
查看次数

Shell - 为什么内置的RANDOM函数返回1?

今天,我发现我的shell脚本偶尔会提前退出.检查代码后,我发现这是因为set -e我的shell脚本中有一个,我使用内置函数RANDOM生成一个随机数.

使用set -e,如果脚本中的任何命令返回非零,脚本将立即退出.所以我写了一段测试代码,如下所示:

set -u
#set -e

for (( i=0; i < 100; i++ ))
do
index=$(expr ${RANDOM} % 16)
echo "RANDOM return $? , index is $index"
done
Run Code Online (Sandbox Code Playgroud)

注意评论set -e,我这样做是为了显示100输出线,其中一些RANDOM return 1确实存在.例如,我得到这样的结果:

RANDOM return 0 , index is 2
RANDOM return 0 , index is 10
RANDOM return 1 , index is 0
RANDOM return 0 , index is 9
RANDOM return 0 , index is 5
RANDOM …
Run Code Online (Sandbox Code Playgroud)

bash shell

0
推荐指数
1
解决办法
74
查看次数

C++ - int main中的argv []是否总是char*类型(如果使用argv则为char**)?

我知道,因为argc是参数的数量,它可以是一个int.但为什么应该argvchar pointer类型?这是否意味着我无法传递整数参数并argv[1]在数学运算中使用?

编辑:为了使它更清晰,是否可以写出像int* argv[].是否argv已定义为char*无法更改的类型?

c++ program-entry-point char command-line-arguments

0
推荐指数
1
解决办法
85
查看次数

为什么不允许第二种语法?

for ( declaration expressionopt ; expressionopt ) statement
Run Code Online (Sandbox Code Playgroud)

for循环的第二种语法只有一个分号,但每当我尝试使用它时,它会产生一个错误,说:

error: expected `;` before `)` token
Run Code Online (Sandbox Code Playgroud)

c

0
推荐指数
1
解决办法
56
查看次数

x ++和++ x不能在c中留下值(左值)?

偶尔,我一直在问一个有趣的问题:x++++x不能留在C值?很多人告诉我这++x不可能因为++ x的汇编代码没有返回寄存器.我对此表示怀疑.所以我做了一些实验.

c代码:

#include <stdio.h>

int main()
{
    int a = 1;
    a++ = 10; 
    ++a = 10; 
    return a;
}
Run Code Online (Sandbox Code Playgroud)

gcc编译错误:

./test.c:6: invalid lvalue in assignment
./test.c:7: invalid lvalue in assignment
Run Code Online (Sandbox Code Playgroud)

更改代码和程序集:

int a = 1;
int b = a++; 
int c = ++a; 
Run Code Online (Sandbox Code Playgroud)

汇编代码:

0x08048400 <main+0>:    push   %ebp
0x08048401 <main+1>:    mov    %esp,%ebp
0x08048403 <main+3>:    sub    $0x18,%esp
0x08048406 <main+6>:    movl   $0x1,-0x4(%ebp)
0x0804840d <main+13>:   mov    -0x4(%ebp),%eax
0x08048410 <main+16>:   mov    %eax,-0x8(%ebp)
0x08048413 <main+19>:   incl   -0x4(%ebp) …
Run Code Online (Sandbox Code Playgroud)

c c++

0
推荐指数
1
解决办法
424
查看次数

"git pull" runs out of memory

I tired to git pull, it suddenly comes out ..

Please let me know what I have to do

git pull
remote: Counting objects: 196, done.
remote: warning: suboptimal pack - out of memory
remote: fatal: Out of memory, malloc failed (tried to allocate 220610561 bytes)
error: git upload-pack: git-pack-objects died with error.
fatal: git upload-pack: aborting due to possible repository corruption on the remote side.
remote: aborting due to possible repository corruption on the remote side.
fatal: early EOF …
Run Code Online (Sandbox Code Playgroud)

git github

0
推荐指数
1
解决办法
3184
查看次数