如何进行以下工作?我的想法是让函数分配一个外部指针,这样我就可以在另一个程序中使用这个概念,但是我不能这样做,因为gcc一直告诉我参数来自一个不兼容的指针类型...它应该很简单,但是我没有看到它。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int allocMyPtr(char *textToCopy, char **returnPtr) {
char *ptr=NULL;
int size=strlen(textToCopy)+1;
int count;
ptr=malloc(sizeof(char)*(size));
if(NULL!=ptr) {
for(count=0;count<size;count++) {
ptr[count]=textToCopy[count];
}
*returnPtr = ptr;
return 1;
} else {
return 0;
}
}
int main(void) {
char text[]="Hello World\n";
char *string;
if(allocMyPtr(text,string)) {
strcpy(string,text);
printf(string);
} else {
printf("out of memory\n");
return EXIT_FAILURE;
}
free(string);
return EXIT_SUCCESS;
}
答案 0 :(得分:2)
这几乎是正确的,但是当你的函数需要一个指向指针的指针时,你必须使用address-of运算符将指针的地址传递给函数:
allocMyPtr(text, &string)
答案 1 :(得分:1)
使用&string
来修复您的问题,与此输入参数相关的类型为char **
而不是char *
if(allocMyPtr(text,&string)) {
关于源代码的评论:
allocMyPtr()
函数已经从文本到字符串进行复制。
那么为什么你用strcpy制作副本agian。它没用了
strcpy(string,text); // this useless
答案 2 :(得分:1)
您正在string
使用pass by value
传递allocMyPtr()
您应该使用pass by adress
,以便指针匹配,否则编译器会告诉您,
与char *
char **
类型
这样做:
if(allocMyPtr(text,&string)) { }