在C中传递char指针

时间:2013-01-15 04:56:39

标签: c pointers char

好的,所以我试图将char指针传递给另一个函数。我可以使用char数组来完成此操作,但不能使用char指针。问题是我不知道它的大小所以我无法在main()函数中声明任何大小。

#include <stdio.h>

void ptrch ( char * point) {
    point = "asd";
}

int main() {
    char * point;
    ptrch(point);
    printf("%s\n", point);
    return 0;
}

然而,这不起作用,这两个作品:

1)

#include <stdio.h>

int main() {
    char * point;
    point = "asd";
    printf("%s\n", point);
    return 0;
}

2)

#include <stdio.h>
#include <string.h>

void ptrch ( char * point) {
    strcpy(point, "asd");
}

int main() {
    char point[10];
    ptrch(point);
    printf("%s\n", point);
    return 0;
}

所以我试图理解我的问题的原因和可能的解决方案

5 个答案:

答案 0 :(得分:13)

这应该有效,因为传递了指向char指针的指针。因此,之后会看到对指针的任何更改。

void ptrch ( char ** point) {
    *point = "asd";
}

int main() {
    char * point;
    ptrch(&point);
    printf("%s\n", point);
    return 0;
}

答案 1 :(得分:6)

void ptrch ( char * point) {
    point = "asd";
}

您的指针按值传递,此代码复制,然后覆盖副本。所以原始指针是不变的。

P.S。需要注意的是,当你执行point = "blah"时,你正在创建一个字符串文字,而任何修改的尝试都是未定义的行为,所以它应该是 const char *

要修复 - 按@Hassan TM传递指向的指针,或返回指针,如下所示。

const char *ptrch () {
    return "asd";
}

...
const char* point = ptrch();

答案 2 :(得分:2)

下面:

int main() { char * point; ptrch(point);

您按值传递point。然后,ptrch设置自己的point本地副本,指向"asd"point main保持不变。

解决方案是将指针传递给main的{​​{1}}:

point

答案 3 :(得分:1)

如果更改函数中指针的值,它将仅在该一个函数调用中保持更改。 不要用指针弄乱你的脑袋并尝试:

void func(int i){
  i=5;
}
int main(){
  int i=0;
  func(i);
  printf("%d\n",i);
  return 0;
}

与指针相同。您执行更改其指向的地址。

如果分配给通过值传递的变量,则函数外部的变量将保持不变。 你可以通过一个指针(指向)来传递它,并通过dereferrencing它来改变它,它与int相同 - 在这种情况下,如果类型是int或char *则无关紧要。

答案 4 :(得分:0)

首先声明功能......像这样

 #include<stdio.h>
 void function_call(char s)

接下来写主代码.....

void main()
{
    void (*pnt)(char);  //  pointer function declaration....
    pnt=&function_call;  //    assign address of function
    (*pnt)('b');   //   call funtion....
}