Muh*_*man 1 c c++ clr return-type visual-studio-2010
我正在使用带有 CLR(通用语言运行时)的 Visual Studio 2010。我想将 unsigned char * 从 compress 函数返回到 main 函数,但是 unsigned char * 和 char * 都给出了错误
“错误 7 错误 C2440:'=':无法从 'char *' 转换为 'unsigned char *' F:\4-2\Thesis\PROJECT\Database Compression Main\Database Compression 2\db_comp_main.cpp 21 “
unsigned char* compressor(char *data)
{
unsigned char *compressed_string;
//With some process I had compressed string of data variable as unsigned char* in variable compressed_string successfully and also printed here. Now want to return it from here.
return compressed_string;
}
int main()
{
unsigned char *main_data;
main_data=compressor("Muhammad Ashikuzzaman.Student from Khulna University Of Engineering And Technology from Bangladesh");// When I click the error from error list the cursor is put here beside str by visual studio.
printf("%s",main_data);
}
Run Code Online (Sandbox Code Playgroud)
需要从压缩函数返回 unsigned char * 类型的数据。请帮忙。
更改任何数据类型(函数参数*data或局部变量*main_data)以匹配类型。尝试这个
unsigned char *main_data;
Run Code Online (Sandbox Code Playgroud)
或者....
无论如何,简单的类型转换都可以使其正常工作:
unsigned char* compressor(char *data)
{
unsigned char *compressed_string;
compressed_string = (unsigned char*) data;
return compressed_string;
}
int main()
{
char *main_data;
main_data=(char*) compressor("Muhammad Ashikuzzaman.Student from Khulna University Of Engineering And Technology from Bangladesh");
printf("%s",main_data);
}
Run Code Online (Sandbox Code Playgroud)
或者...
(用 改变一切char*)
有三种字符类型:(普通)char,signed char和unsigned char。Anychar通常是一个 8 位整数*(在 C 语言中没有专用的“字符类型”),从这个意义上说, asigned和unsigned char具有有用的含义(通常等同于uint8_tand int8_t)。当用作文本意义上的字符时,请使用 a char(也称为普通字符)。这通常是一个,signed char但可以由编译器以任何一种方式实现。所以我认为char*在这里使用是安全的。
工作示例(视为char *数据类型):
char* compressor(char *data)
{
char *compressed_string;
compressed_string = "compressed";
// compressed_string = data;
return compressed_string;
}
int main()
{
char *main_data;
main_data=compressor("Muhammad Ashikuzzaman.Student from Khulna University Of Engineering And Technology from Bangladesh");
printf("%s",main_data);
}
Run Code Online (Sandbox Code Playgroud)
此外,为简单起见,您可以使用指针到指针
void compressor(char **data) {
*data = "compressed"; // assuming the compressed data will be smaller in length of main data, so buffer overflow won't occur
}
int main() {
char *main_data = "Muhammad Ashikuzzaman.Student from Khulna University Of Engineering And Technology from Bangladesh";
compressor(&main_data);
printf("%s", main_data);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
编辑
当您询问通过引用传递的替代方法时,除了通过引用传递将数组作为函数参数传递之外,别无他法。因为当你写的时候,void func(char str[])你可能会认为你正在执行pass by value。但是 g++ 编译器会优化语句void func(char &str[0])以避免将整个数组作为函数参数进行处理。因此,在所有情况下,您实际上都是通过引用传递的。