我的代码在编译时返回错误invalid conversion from ‘char*’ to ‘char’,并将第二行return char32标识为问题。我已经搜索了Internet和该站点,但是没有找到任何帮助。我发现错误消失了,如果我用return *char32替换问题行,则代码可以编译,但是我不确定为什么会出现这种情况。我知道这是指针符号,但是我不确定它们如何应用于这种情况。另外,当我这样做并尝试将*char32打印到终端时,什么也没发生,表明*char32为空。我还验证了确实从文件some file中读取了一行。

更新1:我试图从parse()返回完整的数组。

更新2:我意识到我没有说明此代码的目标。我试图从some file读取第一行,将其传递到parse(),并将前32个字符索引到数组char32中,然后将其传递回main()。对困惑感到抱歉。

#include <fstream>
#include <iostream>
#include <string>
using namespace std;

char parse(string line), char32[32];

int main()
{
    string line;
    ifstream vgv;
    vgv.open("some file");

    getline(vgv, line);
    cout << char32;

    return 0;
}

char parse(string line)
{
    int size = line.size();
    for (int count1 = 0; count1 < 32; count1 ++)
    {
        char32[count1] = line[count1];
    }

    return char32;
}

最佳答案

这里有很多问题。

如果您确实要返回单个字符,则应该

return char32[0];


或您想要的任何字符(按索引)。顺便说一下,这与* char32相同。如果不使用索引,则可以将数组变量视为指向元素中第一个数组的指针。尽管char32是全局变量,但实际上并没有在返回void的函数上方添加任何值-调用者可以直接访问char32。如果要使用cout输出结果,最好从string返回新的parse

达到min(size,32)时,应停止parse中的循环,否则将以不确定的结果(通常是错误的)超出line中的输入字符串。最好在此处为空终止符留出空间-再次使用string可以避免这种情况。

魔术数字是邪恶的。使用它代替硬编码的32:

const size_t MAX_LENGTH(32);


如果所有解析都是按字节复制,则可以使用std::copy,但是我怀疑这是您打算在接口问题解决后构建的真正解析器的原型。我认为在将char myresult = parse(line);输出到char32之前,您缺少对cout的呼叫。

10-08 00:49