我认为演示问题的最简单方法是举个例子.代码:
PROGRAM CONSTANTSTRING(OUTPUT);
CONST
C_MaxLength = 30;
VAR
small_string : VARYING[5] OF CHAR VALUE 'alpha';
PROCEDURE LocalProc(
localstring : VARYING[C_MaxLength] of CHAR
);
BEGIN
writeln('localstring length: ', localstring.LENGTH);
writeln('localstring size: ', SIZE(localstring.BODY));
writeln('C_MaxLength: ', C_MaxLength);
END;
BEGIN
writeln('small_string length: ', small_string.LENGTH);
writeln('small_string size: ', SIZE(small_string.BODY));
writeln('C_MaxLength: ', C_MaxLength);
LocalProc(small_string);
END.
Run Code Online (Sandbox Code Playgroud)
编译:
>pascal /version
HP Pascal I64 V6.1-116 on OpenVMS I64 V8.4
>pascal constantstringinit
>link constantstringinit
>run constantstringinit
Run Code Online (Sandbox Code Playgroud)
并输出:
small_string length: 5
small_string size: 5
C_MaxLength: 30
localstring length: 5
localstring …Run Code Online (Sandbox Code Playgroud) 我正在尝试移植维基媒体插件以在OpenVMS上运行并需要更改类.我正在尝试使用jar更新jar中的.class文件jar uf jar-file .class-file,但是当我这样做时,我得到以下内容:
java.util.zip.ZipException: duplicate entry: META-INF/LICENSE.txt
at java.util.zip.ZipOutputStream.putNextEntry(ZipOutputStream.java:175)
at java.util.jar.JarOutputStream.putNextEntry(JarOutputStream.java:90)
at sun.tools.jar.Main.update(Main.java:507)
at sun.tools.jar.Main.run(Main.java:184)
Run Code Online (Sandbox Code Playgroud)
事实证明,jar中有2个LICENSE.txt文件,我似乎无法摆脱它们.
关于如何将新的.class文件放入jar或如何摆脱重复文件的任何想法?
如何编译和链接openVMS中的示例c程序?任何人都可以解释一下这个过程以及OpenVMS中的调试过程如何?
我正在使用不同的编译器CC.它不像GCC那样有效.
当我使用GCC时,我可以执行"gcc -o exe_filename source_filename",输出将是一个exe文件.
当我使用CC时,我需要2个步骤.首先我编译源文件(假设它涉及.c和.h文件)并创建.lis文件和.obj文件.然后我做了一个创建.exe文件的链接命令.
LIS,OBJ和EXE文件之间有什么关系?我问这个是因为我想知道如果我想在另一台机器上使用exe而不包含不必要的文件,我需要哪些文件.如果LIS和OBJ仅用于编译,我不需要在另一台机器上.
我构建了一个简单的程序,尝试打印命令行参数.
代码如下,我构建了一个可执行文件(TEST.EXE).
int main(int argc, char *argv[])
{
int i;
printf("%s\n",argv[0]);
for (i = 1; i < argc; i++)
printf("argument %d: %s\n", i, argv[i]);
exit (EXIT_SUCCESS);
}
Run Code Online (Sandbox Code Playgroud)
我尝试运行TEST.EXE并打印参数但失败.
命令的结果RUN TEST.EXE test1 test2:
%DCL-W-MAXPARM, too many parameters - reenter command with fewer parameters
Run Code Online (Sandbox Code Playgroud)
我该怎么做才能打印"test1"和"test2"?
如何在VMS上列出历史命令?
在linx上,我们可以使用"历史".
我在VMS上找不到相应的命令.
任何帮助将不胜感激.
谢谢
我正在使用OpenVMS在C中开发,我已经完成了一个代码,该代码放入1001(0-1000)个元素数组,1000(0-999)个0到50之间的随机数.这是代码:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
main(){
int vet[1000], fre[50];
int i;
srand(time(NULL));
for(i=0;i<1000;i++){
vet[i]=(rand()%51);
}
for(i=0;i<1000;i++){
printf("%d\n", vet[i]);
}
for(i=0;i<1000;i++){
fre[vet[i]]=fre[vet[i]]+1;
}
for(i=0;i<51;i++){
printf("The number %d was generated %d times\n", i, fre[i]);
}
}
Run Code Online (Sandbox Code Playgroud)
当我显示每个数字生成的次数时,我看到数字50的数字很大,有时比其他数字多一倍,有人可以帮助我吗?
已解决的代码我现在必须使用srand()
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
main(){
int vet[1000], fre[51] = {0};
int i;
srand(time(NULL));
for(i=0;i<1000;i++){
vet[i]=(rand()%51);
}
for(i=0;i<1000;i++){
printf("%d\n", vet[i]);
}
for(i=0;i<1000;i++){
fre[vet[i]]=fre[vet[i]]+1;
}
for(i=0;i<51;i++){
printf("The number %d was generated %d times\n", i, fre[i]);
}
}
[EOB]
Run Code Online (Sandbox Code Playgroud)
谢谢你们
我想将程序的输出保存到变量.
我使用以下方法,但失败了.
$ PIPE RUN TEST | DEFINE/JOB VALUE @SYS$PIPE
$ x = f$logical("VALUE")
我收到一个错误:%DCL-W-MAXPARM, too many parameters - reenter command with fewer parameters
\WORLD\
我读了C99标准,它stdint.h是C标准库的一部分.
我是否正确阅读,如果我测试符合C99,请使用:
defined (__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L)
Run Code Online (Sandbox Code Playgroud)
这意味着stdint.h应该可用吗?
一个C99很好的例子:我可以考虑一个假装符合要求但不提供stdint.h与自己的合规声明不一致的环境,因此有错误吗?
编辑:对于好奇的系统,有问题的系统是带有HP C编译器的OpenVMS(不是gcc,在openVMS上提供stdint.h).因此,根据到目前为止收到的答案和评论,我必须将此实现(假装为C99)视为错误.有关详情,请访问:https://groups.google.com/forum/#!topic/comp.os.vms/Bnh3tIOc7bo%5B101-125%5D
有人可以解释我如何在OpenVMS上进行汇编开发,我已经在OpenVMS上用C开发了,我刚开始在Windows和Linux中进行汇编.如何编译,链接和运行.asm程序?
我正在用C做练习,但我不知道为什么第一个结果我总是-1(这是不可能的).我只有在交换后才能对数组进行纵坐标.
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
main(){
int vet[100], cont[100];
int i, c, f=100;
int swap;
int r=0;
int search;
srand(time(NULL));
for(i=0;i<100;i++){
vet[i]=rand()%100+1;
}
while(r==0){
r=1;
for(i=0;i<100;i++){
if(vet[i]>vet[i+1]){
swap=vet[i+1];
vet[i+1]=vet[i];
vet[i]=swap;
r=0;
}
}
}
for(i=0;i<100;i++){
printf("%d) %d\n", i+1, vet[i]);
}
i=0;
r=0;
printf("Inserisci numero da ricercare (1-10000) -> ");
scanf("%d", &search);
if(search>10000 || search<0){
printf("Hai inserito un valore non valido\n");
}
else{
c=(i+f)/2;
while(vet[c]!=search && i<f){
if(vet[c]<search){
i=c+1;
c=(i+f)/2;
}
else if(vet[c]>search){
f=c-1;
c=(i+f)/2;
}
if(vet[c]==search){
cont[r]=c+1;
r++; …Run Code Online (Sandbox Code Playgroud) 我正在进行C练习,但是我遇到问题并且我想要重复cicle(do while),事实上如果我输入1,程序再次从顶部开始,但它不会停止在gets(testo);.我尝试了很多方法来解决没有解决方案的bug,任何人都可以帮助我吗?
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
main(){
int cch, cw, i, j, w, ord, f; //counter and index
char testo[80];
char alfa[50][25];
char swap[25];
do{
cch=0;
cw=0;
j=0;
w=0;
f=0;
for(i=0;i<80;i++){
testo[i]='\0';
}
printf("Write the text:\n");
gets(testo);
//initialization 2d array
for(i=0;i<50;i++){
for(j=0;j<25;j++){
alfa[i][j]='\0';
}
}
j=0;
//Count word and characters
if(testo[0]!='\0'){
cw=1;
for(i=0;testo[i]!='\0';i++){
cch++;
if(testo[i]==' '){
cw++;
j++;
}
}
}
if(cch==j){
printf("You haven't written any word\n\n");
}
else{
//Don't count double space
for(i=0;i<cch;i++){
if(testo[i]==' ' …Run Code Online (Sandbox Code Playgroud) 我们有一个基于OpenVMS的传统COBOL应用程序 - 我们对配置没有一个清晰的认识.在这种情况下,通过"配置",我说的是:
上面的1是一个未知的东西似乎很奇怪,但随着时间的推移,可执行文件已经"来去匆匆"(并且许多仍然被使用).其中的可执行文件构成的应用程序,因为它存在的知识,今天,因为知识,其中的可执行文件,不再需要在时间已丢失不得而知.实际上,团队忠实地编译所有源代码文件并部署生成的可执行文件,尽管显然有不再使用的程序.
不言而喻,没有正式的配置管理过程,并且源代码没有保存在版本控制系统中.由于应用程序在OpenVMS上运行,因此相应的基于Files-11的文件系统保留了旧版本的文件(包括源文件),这一直是不将应用程序源放入版本控制系统的借口(尽管使用的原因) VCS的扩展远远超出了以前版本的记录.
当然,有许多方法可以确定配置,但我想从第一个"小步骤"开始,即:确定构成应用程序的可执行文件集.此时我应该提到应用程序的可执行组件不仅限于OpenVMS映像,还包括DCL命令文件.我想要:
如果我们在延长的时间段(例如两个月)内对我们的生产系统进行此日志记录,我们可以很好地了解应用程序包含的内容.与用户咨询一起,我们将能够确认是否需要未被调用的可执行文件.
我想我已经知道如何做1以上,虽然我不确定具体,即使用SET/AUDIT.第二部分,在这个阶段,我不知道该怎么做.
因此,这项工作的主要标准是,为了获得上述信息,现有系统的影响很小.由于配置周围的问号(以及完全缺乏自动化测试),改变任何事情都是一项令人头疼的事情.
使用操作系统级服务SET/AUDIT可以让人们在不需要更改源代码和/或重新编译任何内容的情况下了解正在运行的内容.所以,我的问题是多方:
SET/AUDIT为仅监视特定目录中的图像需要做什么?.COM源文件的情况下记录命令文件调用?