相关疑难解决方法(0)

什么时候argv [0]有空?

从命令行向main()传递参数我所理解的是argc的最小值为1,而argv [0]将始终具有程序名称及其路径.

如果在命令行提供了参数,那么argc的值将大于1,而argv [argc-1]的argv将具有这些参数.

现在这个链接的一个段落说明了一点

argv [0]将是包含程序名称的字符串,如果不可用,则为空字符串.

现在,argv [0]如何以及何时可以使用空字符串?我的意思是程序名称及其路径将始终可用,所以什么时候它可以为空?

作家说"如果不可用"但是何时以及如何可能无法获得该计划名称?

c argv

32
推荐指数
3
解决办法
1万
查看次数

C中命令行参数`argv`的类型是什么?

我正在阅读C Primer Plus中关于命令行参数的一节argv,我很难理解这句话.

它说,

程序将命令行字符串存储在内存中,并将每个字符串的地址存储在指针数组中.该数组的地址存储在第二个参数中.按照惯例,argv对于参数值,将调用指向指针的指针.

这是否意味着命令行字符串作为指向数组的指针数组存储在内存中char

c arrays pointers argv language-lawyer

14
推荐指数
3
解决办法
7859
查看次数

argv [0]可以包含空字符串吗?

在任何C程序中,命令行参数argv[0]指向用于调用程序的名称.是否存在任何指向空字符串的情况""

这种情况的示例代码片段将是一个很好的参考.

c argv

8
推荐指数
3
解决办法
5387
查看次数

Windows与Linux GCC argv [0]值

可能重复:
获取可执行文件的路径

我正在使用MinGW,gcc 4.4.3在Windows上编程.当我使用这样的main函数时:

int main(int argc, char* argv[]){
    cout << "path is " << argv[0] << endl;
}
Run Code Online (Sandbox Code Playgroud)

在Windows上,我得到一个完整的路径:"C:/ dev/stuff/bin/Test".但是,当我在Linux上运行相同的应用程序时,我会得到某种相对路径:"bin/Test".这打破了我的申请!关于如何确保路径在两个系统上都是绝对的任何想法?

c++ linux windows path

6
推荐指数
2
解决办法
3278
查看次数

C++ fopen 相对路径

我通读了一些关于相对路径的主题,但我还是弄错了。我希望某人可以帮助我:)。我使用的是 Visual Studio 2013,Windows 7

我得到以下目录:

这是我的 .exe 文件 D:\uni\c++\ex5\msvc2013\ex5\Debug

这是我要读取的文件 D:\uni\c++\ex5\res\thehead.raw

打开文件的代码:

FILE* f;
f = fopen("..\\..\\..\\res\\thehead.raw", "rb");
if (f == NULL)
printf("FAIL!!");
Run Code Online (Sandbox Code Playgroud)

因为我需要使用相对路径,所以我想通如下:..\ 到达父目录。

所以“..\..\..\”应该让我进入文件夹“D:\uni\c++\ex5\”。

\res 应该打开 res 文件夹。

不用说它失败了,我不知道为什么。任何帮助,将不胜感激。

c++ windows

6
推荐指数
1
解决办法
3万
查看次数

"InitGoogleLogging"有什么作用?

我一直在修改Caffe深度学习库中的示例C++程序,我注意到第234行的代码似乎没有被再次引用.

::google::InitGoogleLogging(argv[0]);
Run Code Online (Sandbox Code Playgroud)

提供的参数是一个prototxt文件,它定义了我正在调用的深度学习模型的参数.令我困惑的是这条线的结果出在哪里?我知道他们最终被用在程序中,因为如果我在prototxt文件中出错,那么程序将崩溃.但是我很难看到如何将数据传递给执行分类任务的类.

c++ machine-learning glog deep-learning caffe

6
推荐指数
1
解决办法
7545
查看次数

C程序,打印其可执行文件名

假设源代码文件名是test.cpp.编译时,它会生成test.exe文件.当我执行它时,它应该识别它的文件名test.exe并打印它.

我可以使用以下代码获取当前目录中存在的所有文件和目录的列表:

DIR * directory;
struct dirent * direct;
direct = readdir(directory);
Run Code Online (Sandbox Code Playgroud)

但是,如何识别相关的文件名,在这种情况下是哪个"test.exe"

c c++

5
推荐指数
3
解决办法
6731
查看次数

如何获得程序路径

可能重复:
如何在C中查找可执行文件的位置

我正在使用GTK +在C++中编写一个多平台应用程序,我遇到了问题.我必须得到程序路径.例如,当节目在/home/user/program(或C:\Users\user\program.exe)时,我有/home/user/(或C:\Users\user\).

可以以及如何做到这一点?

c++ gtk

4
推荐指数
2
解决办法
3万
查看次数

有没有办法在运行时访问调试符号?

这是一些示例代码,用于了解我想要的内容.

int regular_function(void)
{
     int x,y,z;
     /** do some stuff **/
     my_api_call();
     return x;
}
...
void my_api_call(void)
{
    char* caller = get_caller_file();
    int line = get_caller_line();
    printf("I was called from %s:%d\n", caller, line);
}
Run Code Online (Sandbox Code Playgroud)

有没有办法实现get_caller_file()get_caller_line()?我见过/使用技巧,例如#define荷兰国际集团my_api_call作为一个函数调用传入__FILE____LINE__宏.我想知道是否有办法在运行时而不是编译时访问该信息(假设它存在)?像Valgrind这样的东西是不是必须做这样的事情才能获得它返回的信息?

c runtime debug-symbols

3
推荐指数
1
解决办法
380
查看次数

没有足够的变量来适应哨兵

根据exec引用,对exec(或一般的堆栈检查vararg函数)的调用在(char*)NULL参数列表的末尾需要一个aka 0.然而,海湾合作委员会抱怨以下代码

char cmdFullPath[4096]; //yes this 4096 thing is bad coding practice 
...
execl(cmdFullPath, (char*)NULL);

//warning: not enough variable arguments to fit a sentinel
Run Code Online (Sandbox Code Playgroud)

谁知道什么是错的?

c gcc function exec system-calls

3
推荐指数
1
解决办法
9668
查看次数

strlen(*argv)产生不寻常的结果

我只是为了好玩而运行以下内容,但无法解释结果.假设./test WTF?是在命令行运行,产生的输出是 WTF? 6 2.为什么报告的argc值(2 - 正如预期的)和strlen(*argv)之间存在如此巨大的差异,后者变为6.我知道字符串数组并不是strlen正在寻找的,但是,我认为它产生的价值(如果产生任何东西)将合理地接近argc.思考?

#include <stdio.h>
#include <ctype.h>
#include <string.h>

int main(int argc, char**argv)
{
    for (int i = 1; i < argc; i++)
    {
        for (int j = 0; j < strlen(argv[i]); j++)
        {
            printf("%c", argv[i][j]);

        }
        printf(" ");
    }
    printf("\t%lu\t%d", strlen(*argv), argc);
    printf("\n");
}
Run Code Online (Sandbox Code Playgroud)

c argv command-line-arguments argc

2
推荐指数
1
解决办法
442
查看次数

即使我尝试在 C 中创建文件,也找不到文件时出现分段错误

我正在编写将文本附加到文件的代码。它fopen在开头使用,WriteToFile因此即使文件不存在,它也会创建它。

但是,当我根本没有输入文件时会发生什么?根本没有争论?只是./a.out

分段故障。

我不知道为什么,在我看来,我所做的一切都很好,以避免出现任何问题。

int main(int argc, char **argv)
{
    
    char file_name[30] = "file.txt";
    
    printf("%s",file_name); /* for debugging : doesn't print it */
    
    if (0 != argc)
    {
        strcpy(file_name, argv[1]);
    }
    
    WriteToFile(file_name);
    
}
Run Code Online (Sandbox Code Playgroud)

或者(以防我真的无法将字符串文字放入 char 数组中):

char file_name[30];
    
    if (0 == argc)
    {
       strcpy(file_name, "file.txt");
    }
    else
    {
        strcpy(file_name, argv[1]);
    }
Run Code Online (Sandbox Code Playgroud)

对于我得到的两种情况

Segmentation fault (core dumped)

c fopen file segmentation-fault argv

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