分段错误:连接字符串

时间:2012-03-10 20:13:33

标签: c

我正在尝试连接两个字符,并在返回的行上获得分段错误。 当我使用char而不是char *时,(onechar-a +'A')工作,虽然我没有尝试连接。如果我把它留作char而不是char *,我会收到关于施法的警告。

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;
        }
    }
}

1 个答案:

答案 0 :(得分:3)

这不起作用:

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

您不应该将字符强制转换为char指针。结果是字符值(值<= 255)将被strcat用作字符指针的地址,这就是你的程序段错误的原因。

你可以这样做:

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;
}