在C中传递char指针

Sar*_*aya 5 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;
}
Run Code Online (Sandbox Code Playgroud)

但这不起作用,这两个作品:

1)

#include <stdio.h>

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

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;
}
Run Code Online (Sandbox Code Playgroud)

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

hma*_*tar 13

这应该工作,因为传递指向char指针的指针.因此,之后将在外部看到对指针的任何改变.

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

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


Kar*_*k T 6

void ptrch ( char * point) {
    point = "asd";
}
Run Code Online (Sandbox Code Playgroud)

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

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

修复 - 将指针传递给指针,如@Hassan TM所做,或返回如下指针.

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

...
const char* point = ptrch();
Run Code Online (Sandbox Code Playgroud)