我试图连接两个字符,并在返回的上一行出现分段错误。
当我使用char而不是char*时,(onechar-a+'a')工作了,尽管我没有尝试连接。如果我把这个作为char而不是char*我会得到关于casting的警告。

char *carat;
carat = test_carat(ttyinfo.c_cc[VINTR]);
carat = test_carat(ttyinfo.c_cc[VINTR]);

char * test_carat(char onechar)
{
    if (onechar >= 32 || onechar !=127)
    {
        if (iscntrl(onechar))
        {
            char * returnString =  strcat((char*)'^',  (char*)(onechar - 1 + 'A'));
            return returnString;
        }
    }
}

最佳答案

那是行不通的:

   strcat((char*)'^',  (char*)(onechar - 1 + 'A') )

不应该将字符强制转换为字符指针。其结果是字符值(值你可以这样做:
char * test_carat(char onechar)
{
    if (onechar >= 32 || onechar !=127)
    {
        if (iscntrl(onechar))
        {
            char * returnString = (char *)malloc(3);
            returnString[0] = '^';
            returnString[1] = (onechar - 1 + 'A');
            returnString[2] = '\0';
            return returnString;
        }
    }
    return NULL;
}

10-02 02:12