2017-05-29 62 views
-2

我有这样的代码:的C指针不工作

#include<stdio.h> 
int main(int args,char*argv[]) 
{ 
    char *input_f; 

    input_f=(argv+1); 

    printf("%d\n",input_f); 
    printf("%d\n",(argv+1)); 
    printf("%s\n",*(argv+1)); 
    printf("%s\n",argv[1]); 
    printf("%s\n",*input_f); 
    return 0; 
} 

但是,如果我运行它(test.exe hi.txt)输出将是:

1577880
1577880
hi.txt
hi.txt
(null)

如何创建指向argv[1]的指针?
为什么我的代码不起作用?

编辑:该方案需要一个文件,在输入和指针input_f点,但在输出argv[1]打印的文件名,但input_f不!

+3

你认为的argv [1]是什么?你认为它的价值应该是什么?你能指望什么?您的代码的哪一部分没有按照您的预期行事? – Yunnosch

+1

'input_f'没有被声明,并且'printf(“%d \ n”,(argv + 1))'在'argv [1]'处将整个地址打印出来。你想要输出什么?目前还不清楚你想要做什么。 – lurker

+1

你的编译器是否保持沉默?我猜不是...... –

回答

1

使用此

input_f=*(argv+1); 

,而不是

input_f=(argv+1); 

使用本

printf("%s\n", input_f); 

代替

printf("%s\n",*input_f); 

全码:

#include<stdio.h> 
int main(int args,char*argv[]) 
{ 
    char *input_f; 

    input_f=*(argv+1); 

    printf("%s\n",input_f); 
    printf("%s\n",*(argv+1)); 
    printf("%s\n",argv[1]); 
    printf("%s\n",input_f); 
    return 0; 
} 
0

为什么我的代码不起作用?在printf()

char *input_f; 

格式说明%s

假设input_f被声明为

printf("%s\n",*input_f); 

期望给定的参数是char *类型的,你正在提供*input_f,这是char的类型。


如何创建指针指向的argv [1]?

argv类型的数组的指针到char的。因此,argv[1]的类型是指向char。因此,您可以将它的地址存储在指向指向char的指针,即:类型char **

char **p = &argv[1];