好吧所以我试图将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)
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)