我正在学习并试图正确理解与C合作的这一部分。
我正在做练习,必须编写一个返回图像的函数,但是有一个指向指针的指针,如果出现错误,必须存储一个值。
仅供参考:该功能存储在主文件包含的模块中。
这是我的代码的签名声明:
Img imageFromFile(const char * filename, char ** messageErreur) {
if (error)
messageErreur = 1; //Trying to pass 1 has error code out of the function
}
我在编译时继续收到此消息:
img.c:148:23: attention : assignment makes pointer from integer without a cast messageErreur = 1; //Trying to pass 1 has error code out of the function
我不知道我要注意什么,以确保我需要在主文件中声明要传递此功能。
它是指向指针的指针,所以我想我需要创建一个char []类型的指针?
传递地址"&指针"在调用函数时?
答案 0 :(得分:2)
调用者正在提供指向char指针的指针,换句话说,您已被授予将char *返回给调用者的能力。为此,首先取消引用char **,然后分配要返回的char *:
*messageErreur = "some string";
*messageErreur = someRuntimeAllocatedStringBuffer;
请务必小心,如果调用者被指定为"某些错误字符串"他们不能修改它(通常也不会修改它)。
答案 1 :(得分:1)
messageErrueur
是一个指向char指针的指针。该char指针将指向一个字符串,这可能是错误消息。因此,假设在函数外部声明了错误消息:
char * error = "error message"
在您指定messageErrueur
的imgFromFile中,您可以messageErrueur
指向error
,如下所示:
messageErrueur = &error;
&符号(&
)将char * error
的地址提供给messageErrueur
,现在messageErrueur
正在查看error
处存储的字符。< / p>
如果我对这个问题有任何误解,请纠正我。希望这有帮助!