首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >无符号字符*数据作为c++或C++中函数的返回类型

无符号字符*数据作为c++或C++中函数的返回类型
EN

Stack Overflow用户
提问于 2014-09-11 00:11:27
回答 2查看 11.8K关注 0票数 1

我正在使用带有CLR(公共语言运行时)的visual studio 2010。我想从compress函数返回unsigned char *到main函数,但是unsigned char *和char *都返回erro

“错误7错误项目:'=‘:无法从'char *’转换为'unsigned char *‘F:\4-2\C2440\C2440\Database Compression Main\Database Compression 2\db_comp_main.cpp 21”

代码语言:javascript
运行
复制
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);
}

需要从压缩器函数返回unsigned char *类型数据。请帮帮忙。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-09-11 01:02:33

更改任何数据类型(函数参数*data或局部变量*main_data)以匹配该类型。尝尝这个

代码语言:javascript
运行
复制
unsigned char *main_data;

或者...

无论如何,简单的类型转换都会让它正常工作:

代码语言:javascript
运行
复制
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);
}

或者..。

(用char*改变一切)

有三种字符类型:(普通) charsigned charunsigned char。任何char通常都是一个8位整数*(C语言中没有专用的“字符类型”),从这个意义上说,signedunsigned char有一个有用的含义(通常相当于uint8_tint8_t)。当用作文本意义上的字符时,请使用char (也称为普通字符)。这通常是一个signed char,但是可以由编译器以任何一种方式实现。所以我认为在这里使用char*是安全的。

工作示例(考虑char *作为数据类型):

代码语言:javascript
运行
复制
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);
}

此外,为简单起见,您可以使用指针指向指针

代码语言:javascript
运行
复制
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;
}

编辑

由于您要求的是通过引用传递的替代方法,因此除了通过引用传递数组作为函数参数之外,别无选择。因为当您要编写void func(char str[])时,您可能会认为您正在执行按值传递。但g++编译器会将语句优化为void func(char &str[0]),以避免将整个数组复制为函数参数。因此,在所有情况下,您实际上都是通过引用传递。

票数 5
EN

Stack Overflow用户

发布于 2014-09-11 01:47:27

在这里,您必须为字符串分配内存存储。指针只指向地址a,而不是像array.You那样的任何字节序列。对于C,必须使用calloc或malloc,对于C++,则必须使用new来分配所需的内存地址。使用类型转换将char*转换为unsigned char*。

代码语言:javascript
运行
复制
#include <bits\stdc++.h>
unsigned char* compressor(unsigned char *data)
{
    unsigned char *compressed_string = new unsigned char[100];
    //With some process I had compressed string of data variable as unsigned unsigned char** in variable compressed_string successfully and also printed here. Now want to return it from here.
    compressed_string = (unsigned char*)"working";
    return compressed_string;
}
int main()
{
  unsigned char *main_data = new unsigned char[1000];
  main_data=compressor((unsigned char*)"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);
}

您可以根据需要使用不同的输入变量来使用内存,以避免不必要的动态分配。

代码语言:javascript
运行
复制
#include <bits\stdc++.h>
unsigned char* compressor(unsigned char *data) {
    unsigned char *compressed_string = new unsigned char[strlen((char*)data)+1];
    //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.
    compressed_string = (unsigned char*)"working";
    return compressed_string;
}
int main() {
    unsigned char *inp = new unsigned char[1000];
    inp = (unsigned char*)"Muhammad Ashikuzzaman.Student from Khulna University Of Engineering And Technology from Bangladesh";
    unsigned char *main_data = new unsigned char[strlen((char*)inp)+1];
    main_data = compressor(inp);
    printf("%s",main_data);
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25770240

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档