指针指针

时间:2011-12-02 19:39:39

标签: c pointers char

我在使用这段代码时遇到了很多麻烦(我不擅长指针:P)。所以这是代码。

printf("\n Enter the file name along with its extensions that you want to delete:-");
                     scanf("%s",fileName);
                                       deletefile_1_arg=fileName;
                                       printf("test\n");
                     result_5 = deletefile_1(&deletefile_1_arg, clnt);
                     if (result_5 == (int *) NULL) {
                        clnt_perror (clnt, "call failed");
                     }
                     else
                     {
                        printf("\n File is deleted sucessfully");
                        goto Menu2;
                     }
                     break;

被调用的函数如下。

int *
deletefile_1_svc(char **argp, struct svc_req *rqstp)
{
static int  result;
    printf("test2\n");
printf("%s",**argp);
if(remove(**argp));
{
    printf("\nFile Has Been Deleted");
    result=1;
}
return &result;
}

我在控制台上获得test2但是。它不打印argp /删除该特定文件的值。我不确定我做错了什么。请帮帮我。

2 个答案:

答案 0 :(得分:1)

argp是一个指向指针char的指针,你试图将它用作指向char的指针,尝试将代码更改为:

printf("%s", *argp);

您还需要将remove来电更改为:

remove(*argp);

答案 1 :(得分:0)

我总是发现绘画图片有助于理解指针。使用框作为内存地址,框的标签是变量名。如果变量是一个指针,那么该框的内容就是另一个框的地址(绘制到另一个框的行)。

当您不需要时,您正在使用指针。您的“deletefile1_svc”函数根本不操作“argp”的值,因此它不需要指向指针的指针。另外,您的“结果”不需要作为指针返回,因为它只是一个数值。您也不初始化结果(可能为零)或重新初始化它(它是静态的,因此它会记住分配给它的最后一个值)。

int
deletefile_1_svc(const char *argp, struct svc_req *rqstp)
{
    int  result = 0;   /* Initial value => failure */
    if (remove (argp) == 0)
    {
        result = 1; /* 1 => success */
    }
    return result;
}

调用函数使用:

result_5 = deletefile1_svc(filename, clnt);
if (result_5 == 0)
    // Failed
else
    // Success

这将使代码更简单,更不容易出错。