从main()参数中提取字符串

时间:2011-04-05 23:19:02

标签: c

我正在尝试创建一个指向程序中某个main()参数的指针。 我设置了初始指针,然后我将它设置为等于数组中的第二个元素,但是当我尝试编译时出现错误,分段错误。这是因为指针指向错误的地址吗?

以下是代码:

char *filename;
*filename = argv[1];
printf("The filename is: %s", *filename);

我得到关于指针试图将参数转换为int的错误。这是因为指针实际上是一个整数地址值,我试图将它设置为等于字符串吗?

编辑:当我更改为“filename = argv [1]”时,我从编译器中得到以下错误:赋值从指针目标类型中丢弃限定符。

4 个答案:

答案 0 :(得分:7)

编译时不可能发生分段错误。除非,编译器违反了内存安全性,这是不太可能的。我会认为当你运行程序时会发生这种情况:D。

问题在于:

*filename = argv[1];

应该是:

filename = argv[1];

为什么呢?你声明了一个指向char的指针,这个指针是单一的,特别是没有任何意义。然后,您取消引用该指针并将数据分配到该内存位置。哪个,谁知道谁在哪里!

修改:您还在filename来电中取消引用printf()。删除*:)。

另外,没有'编译器在你指定* filename时发出警告?在没有演员表的情况下从指针制作整数,我猜是什么? 注意警告,它们提供了有用的信息!

干杯。

答案 1 :(得分:4)

您没有将filename指向与argv[1]相同的位置。要做到这一点,你需要

filename = argv[1];

使用您的版本(*filename = argv[1];),您尝试将任何文件名点设为argv [1]中的值。这有很多错误:a)文件名未初始化,可以指向任何地方,甚至是无效的位置; b)argv[1]属于char*类型,您正试图将其放入char类型的位置!

答案 2 :(得分:3)

在语句*filename = argv[1];中,表达式*filename尝试取消引用(找到指向的值)filename指针,该指针尚未指向任何有意义的指针。

将作业更改为filename = argv[1]

答案 3 :(得分:0)

当您尝试分配char时,您将取消引用char *,因此您尝试将指针填充到char中。因为文件名是未初始化的,所以你试图点击一些随机地址(或者可能是地址0x00000000。而你的print语句,如果你到那么远,也不会工作:你再次取消引用char *(得到一个char)然后告诉printf将其解释为指向以空字符结尾的字符串的指针。

试试这个:

char *filename ;
filename = argv[1] ;
printf( "The filename is: %s" , filename ) ;