我有一个工作程序,但现在我必须使用int argc和char *argv[]参数main.每当我尝试这样做时,它会给我带来无法保存的错误.有没有办法在Eclipse中制作argc和argv工作?
我编写了以下脚本,它获取文件名,然后组合并链接该文件。但它不起作用。它有什么问题?
EXPECTED_ARGS=2
if [ $# -ne $EXPECTED_ARGS ]
then
echo "[+] Assembling with Nasm."
nasm -f elf32 $1 -o $1.o
echo "[+] Linking ..."
ld $1.o -o $1
echo "[+] Done!"
else
printf "\nInvalid number of arguments, please check the inputs and try again\n"
fi;
Run Code Online (Sandbox Code Playgroud)
当我在不传递任何参数的情况下运行它时,它不会显示以下错误:
printf "\nInvalid number of arguments, please check the inputs and try again\n"
Run Code Online (Sandbox Code Playgroud) 我对 tcl 有点陌生,但我必须编写一个如下所示的过程:
proc TestVerb { Data Data_txt } {
VERBATIM [format "// Data: $Data - $Data_txt"]
if { $argc == 2} {
VERBATIM {// SUCCESS //}
else {
exit 1
}
Run Code Online (Sandbox Code Playgroud)
我这样称呼这个过程:TestVerb Switch"This is used for..."
proc 位于不同的文件中,proc 调用位于另一个文件中。它们似乎来源正确,因为如果我不使用,我会得到所需的输出,$argc但一旦我使用其中一个$argv,或者$argc我收到以下编译错误:无法读取$argv/$argc没有这样的变量
如果我引用这个变量$::argc,$::argv结果是不正确的。$argv为空且 $argc 为 0
我最近在搜索 C 中的环境变量时遇到了以下问题:
int main (int argc, char *argv[], *char *envp[])
Run Code Online (Sandbox Code Playgroud)
我四处搜索,找不到关于我的问题的任何结论。
main()可以接受的所有可用参数是什么?
我想创建一个只需要一个随机数的程序,所以我尝试在main函数中使用argc的地址作为随机源,因为我认为程序在内存中的位置是随机的,也可以保存一些include语句,所以我试过了:
#include <stdio.h>
int main(int argc,const char* argv[]){
printf("%lu\n",(unsigned long int)&argv/sizeof(unsigned long int));
return 0;
}
Run Code Online (Sandbox Code Playgroud)
但我发现每次输出都不是很"随机":它们是4的倍数:
17591828907268
17591841542404
17591845040388
17591834556676
Run Code Online (Sandbox Code Playgroud)
是什么原因?并且使用argc的地址作为随机数可能吗?
然后我尝试删除一些地址:
#include <stdio.h>
int main(int argc,const char* argv[]){
printf("%lu\n",(unsigned long int)&argv >> 12);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这次看起来很随机,至少它有奇数和偶数:
34359070631
34359034616
34359078055
34359080624
Run Code Online (Sandbox Code Playgroud)
将argc的地址变成随机数的"正确"方法是什么?
我在Java中使用Jython; 所以我有一个类似于下面的Java设置:
String scriptname="com/blah/myscript.py"
PythonInterpreter interpreter = new PythonInterpreter(null, new PySystemState());
InputStream is = this.getClass().getClassLoader().getResourceAsStream(scriptname);
interpreter.execfile(is);
Run Code Online (Sandbox Code Playgroud)
这将(例如)运行以下脚本:
# myscript.py:
import sys
if __name__=="__main__":
print "hello"
print sys.argv
Run Code Online (Sandbox Code Playgroud)
我如何使用此方法传递'命令行'参数?(我希望能够编写我的Jython脚本,以便我也可以使用'python script arg1 arg2'在命令行上运行它们).
可能重复:
main中的argc和argv
我很难理解用于一般主函数声明的符号,即int main(int argc, char *argv[]).我明白实际传递给main函数的是一个指向指针的指针char,但我觉得这个符号很难.例如:
为什么**argv指向第一个字符而不是整个字符串?同样,为什么*argv[0]指向与前一个示例相同的内容.
为什么*argv指向整个第一个字符串,而不是char像前一个例子那样的第一个字符串?
这有点无关,但是为什么*argv + 1指向一个字符串'减去第一个字符'而不是指向数组中的下一个字符串?
嗨非常新手的问题,但我无法弄清楚:
我有一个名为bar的函数
class foo
{
public:
bool bar(int argc, char** argv);
}
Run Code Online (Sandbox Code Playgroud)
argv应该包含
"--dir" and "/some_path/"
Run Code Online (Sandbox Code Playgroud)
如何创建argv和argc以便我可以将它们传递到bar()?我尝试了很多方法,但我无法获得指针和类型转换.
因此,我不想从命令行获取argv,而是想在代码中创建它.
谢谢你的任何输入!
我最近对以前工作的代码做了一些小改动,现在程序在执行时立即遇到分段错误.事实上,它甚至没有成为主要的第一行.
这是代码的开头:
int main (int argc, char* argv[])
{
fprintf(stderr, "Not even getting here!\n");
bool d;
bool v;
...
}
Run Code Online (Sandbox Code Playgroud)
和gdb的相应输出(编译时包含-g标志).警告:禁用地址空间随机化时出错:成功
Program received signal SIGSEV, Segmentation fault.
0x0000000000400978 in main (argc=<error reading variable: Cannot access
memory at address 0x7fffca168f1c, argv=<error reading variable: Cannot
access memory at address 0x7fffca168f10>) at src/prog.c:35
Run Code Online (Sandbox Code Playgroud)
仅供参考:第35行只是主要方法的左大括号("{").没有实际的代码.
我之前从未遇到过这样一个奇怪的错误,我对这是怎么回事感到困惑.在出现此错误之前,开头的代码根本没有改变,并且分段错误甚至没有发生在新代码附近的任何地方这一事实让我大吃一惊.我放在main中的任何代码都没有被执行,因此我无法打印出值以查看出现了什么问题.
此外,我尝试使用/不使用命令行参数运行程序,看看是否是原因.它没有改变任何东西.
下面这篇文章,我在那里找到了一个临时的解决方法我的其他问题,我想知道我是否可以更换int argc, char** argv一个std::vector<std::string>变量/对象。
考虑假想的代码:
#include <iostream>
#include <CloseLibrary>
void someFunction(int argc, char** argv){
for (int i = 0; i < argc; ++i) {
std::cout << argv[i] << std::endl;
}
}
int myFunc(int argc, char** argv){
someFunction(argc, argv);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
其中CloseLibrary是一个封闭的库,我无法访问源代码,而该someFunction库中的函数需要int argc, char** argv命令行参数。但出于某种原因char**,我的代码中不能有双指针。
在这篇文章中,我提出了类似我需要的东西,但我不知道如何使用它。我可以这样写代码吗:
#include <iostream>
#include <CloseLibrary>
#include <vector>
void someFunction(int argc, char** argv){
for (int i = 0; …Run Code Online (Sandbox Code Playgroud)