为什么argv[0]
不打印文件名的第一个字符而不是整个文件名字符串?
如果argv
是指向一个字符数组的指针,那么不应该使用带有字符的[n]
结果访问它吗?如果它是一个字符串(如printf(argv[n]
所示),那么为什么argv[0][0]
却没有得到文件名的第一个字符(编译但启动时崩溃)?
int main(int argc, char **argv){
printf(argv[0][0]);
while (1){}
return 0;
}
答案 0 :(得分:2)
您的代码表现出未定义的行为,因为您正在将char
传递给需要指针的函数。
要打印单个字符,您可以使用以下选项,
fputc(argv[0][0], stdout);
putchar(argv[0][0]); // Effectively the same as above
printf("%c\n", argv[0][0]);
您可以添加更多printf()
个变体。
代码崩溃的原因是,printf(argv[0][0]);
是未定义的行为,因为该函数将尝试取消引用指针,但是您传递了单个字符,并且该字符的值将被解释为内存地址。
您确实需要启用编译器警告。
答案 1 :(得分:-2)
我正在使用ubuntu服务器14来执行,并且使用gcc
编译器来编译代码,并且argv[n][n]
为我工作。看一下这段代码
// C program to illustrate
// command line arguments
#include<stdio.h>
int main(int argc, char* argv[])
{
int counter;
printf("Program Name Is: %s",argv[0]);
if (argc == 1)
printf("\nNo Extra Command Line Argument Passed Other Than Program Name");
if (argc >= 2)
{
printf("\nChecking double array elements: %c",argv[0][0]);
}
return 0;
}
输出:
Program Name Is: ./test
Checking double array elements: .
您使用什么机器进行编译和执行?也许还有其他错误...仔细检查!