【问题标题】:string copy using pointer as a argument of function.使用指针作为函数参数的字符串复制。
【发布时间】:2015-01-05 00:04:28
【问题描述】:
#include <stdio.h>
void stringcopy(char *, char *);

int main(void) 
{

   char *a="akash";
   char *b;
   stringcopy(a,b);
   printf("%s",b);//why this is null? 
   return 0;
   }
 void  stringcopy(char*a,char*b)
{
     b=a;
     printf("%s\n",b);// it is not null
}

块引用 在函数 stringcopy 中,我得到了正确的输出。但打电话后我在 main.why 发生了?请解释一下?

【问题讨论】:

  • 在 main 中,您不会看到更改,因为您只是在 stringcopy 范围内更改 b stringcopy
  • 我猜这是因为在 stringcopy 函数中复制了函数参数。所以你需要传递一个指针来修改它们。

标签: c arrays string function pointers


【解决方案1】:

stringcopy 返回后它不起作用,因为在 C 函数中,参数是按值传递的,所以 b 将保持不变(在 ab 的本地副本上进行了赋值)。它只在函数内修改。阅读call stack

ab 的地址传递给stringcopy 并在函数内取消引用它们。

#include <stdio.h>

void stringcopy(char**, char**);

int main(void) 
{
   char *a = "akash";
   char *b;
   stringcopy(&a, &b);
   printf("%s\n",b);
   return 0;
}

void  stringcopy(char** a,char** b)
{
     *b = *a;
     printf("%s\n", *b);
}

请注意,这只会使b 指向存储字符串文字"akash" 的内存区域,因此这并不是完全复制字符串。

【讨论】:

  • 这解决了一个主要的 OP 问题,但仍然存在一个弱点。 a 指向 const char *。建议的stringcopy() 导致char *b 也指向相同的const char *。不过在这个 sn-p 中,没什么大不了的。
猜你喜欢
  • 2019-04-24
  • 1970-01-01
  • 2013-01-04
  • 2014-07-16
  • 1970-01-01
  • 1970-01-01
  • 2012-03-10
  • 1970-01-01
  • 2020-07-16
相关资源
最近更新 更多