我在使用这段代码时遇到了很多麻烦(我不擅长指针: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 /删除该特定文件的值。我不确定我做错了什么。请帮帮我。
答案 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
这将使代码更简单,更不容易出错。