[英]How to convert unsigned char* to an unsigned char array in C/C++?
[英]how to access unsigned char array from inside function in C?
我试图从函数readfile中访问名为buf的缓冲区。 当我打印sizeof(buf)时,我看到buf有4个字节(指针)。 另一方面,如果将printf命令粘贴到readFiles上,则可以看到大小为2916。实际上,我不明白为什么它不是729,但是很明显,我无法访问readfile中的buf我需要。 所以问题是; 问题出在哪里,如何解决?
void readfiles(FILES * files){
unsigned char * buf [1*729];
int skip_lines = 14;
int shift = 0;
char * filename = "file.txt";
// printf("buf size %d", sizeof(buf));
readfile(filename, skip_lines, buf, shift);
}
int readfile(char * name, int skip, unsigned char * buf, int shift ){
// buf is (unsigned char *) on address 0x22dd18 ""
printf("buf size %d", sizeof(buf));
}
如果将数组作为指针传递给C函数,则无法检测其长度。
int readfile(char * name, int skip, unsigned char * buf, int shift ){
// nothing you do in here can tell how big buf is
}
如果您需要知道buf的长度,则必须将其作为参数传递
int readfile(char * name, int skip, unsigned char * buf,int blen, int shift ){
...
}
在readfile()
,
printf("buf size %d", sizeof(buf));
如您所知,这将显示4,因为buf是一个指针。 readfiles()
的相同打印语句。 打印更大的数字,因为buf
是一个数组。
如pm100所述,您无法从指向该数组的指针获取数组的大小。 此外,在访问指针时需要非常小心。 如果它们没有指向有效的内存地址,那么您将遇到很多错误。 这些问题很难跟踪,因为问题将发生在代码的其他部分而不是指针错误所在的地方。 我建议您了解malloc()
和free()
,以便为指针动态分配内存。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.